glTranslate, how exactly does it work?
- by mykk
I have some trouble understanding how does glTranslate work.
At first I thought it would just simply add values to axis to do the transformation.
However then I have created two objects that would load bitmaps, one has matrix set to GL_TEXTURE:
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();
}
}
and another to 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();
}
}
Now they are both drawn in Renderer.OnDraw. However background moves exactly 5 times faster. If I multiply boxScrolled by 5 they will be in sinc and will move together. If I modify backgrounds vertices to be
float[] vertices = new float[]
{ 1f, -1f, 0.0f,
0f, -1f, 0.0f,
1f, 1f, 0.0f,
0f, 1f, 0.0f };
It will also be in sinc with the box.
So, what is going under glTranslate?