Ich habe einige Probleme zu verstehen, wie glTranslate funktioniert. Zuerst dachte ich, es würde einfach Werte zur Achse hinzufügen, um die Transformation durchzuführen.
Dann habe ich jedoch zwei Objekte erstellt, die Bitmaps laden würden, eines hat die Matrix auf GL_TEXTURE gesetzt:
public class Background
{
float[] vertices = new float[]
{ 0f, -1f, 0.0f,
4f, -1f, 0.0f,
0f, 1f, 0.0f,
4f, 1f, 0.0f };
....
private float backgroundScrolled = 0;
public void scrollBackground(GL10 gl)
{
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glTranslatef(0f, 0f, 0f);
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_TEXTURE);
gl.glTranslatef(backgroundScrolled, 0.0f, 0.0f);
gl.glPushMatrix();
this.draw(gl);
gl.glPopMatrix();
backgroundScrolled += 0.01f;
gl.glLoadIdentity();
}
}
und noch eine zu GL_MODELVIEW:
public class Box
{
float[] vertices = new float[]
{ 0.5f, 0f, 0.0f,
1f, 0f, 0.0f,
0.5f, 0.5f, 0.0f,
1f, 0.5f, 0.0f };
....
private float boxScrolled = 0;
public void scrollBackground(GL10 gl)
{
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0f, 0f, 0f);
gl.glPushMatrix();
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(boxScrolled, 0.0f, 0.0f);
gl.glPushMatrix();
this.draw(gl);
gl.glPopMatrix();
boxScrolled+= 0.01f;
gl.glLoadIdentity();
}
}
Jetzt werden beide in Renderer.OnDraw gezeichnet. Der Hintergrund bewegt sich jedoch genau fünfmal schneller. Wenn ich boxScrolled mit 5 multipliziere, sind sie aufrichtig und bewegen sich zusammen. Wenn ich Hintergrundscheitelpunkte so ändere, dass sie sind
float[] vertices = new float[]
{ 1f, -1f, 0.0f,
0f, -1f, 0.0f,
1f, 1f, 0.0f,
0f, 1f, 0.0f };
Es wird auch aufrichtig mit der Box sein. Also, was ist unter glTranslate los?