Tôi có một số khó khăn để hiểu làm thế nào để glTranslate hoạt động. Lúc đầu, tôi nghĩ rằng nó chỉ đơn giản là thêm các giá trị vào trục để thực hiện chuyển đổi.
Tuy nhiên, sau đó tôi đã tạo hai đối tượng sẽ tải bitmap, một đối tượng có ma trận được đặt thành 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();
}
}
và một cái khác cho 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();
}
}
Bây giờ cả hai đều được vẽ trong Renderer.OnDraw. Tuy nhiên, nền di chuyển nhanh hơn chính xác 5 lần. Nếu tôi nhân hộp số được nhân với 5 thì chúng sẽ thành thật và sẽ di chuyển cùng nhau. Nếu tôi sửa đổi các đỉnh nền thành
float[] vertices = new float[]
{ 1f, -1f, 0.0f,
0f, -1f, 0.0f,
1f, 1f, 0.0f,
0f, 1f, 0.0f };
Nó cũng sẽ chân thành với hộp. Vì vậy, những gì đang diễn ra dưới glTranslate?