是否有更简洁的方法来重置opengl中的起始绘图点 - 对于android

时间:2012-02-20 16:34:49

标签: android opengl-es

所以我正在向我的GLView绘制一堆方形平原,并想知道是否有更简洁的方法来重置每个方块之间的glTransatef ..我的第一个方块让我们说是z轴的-5,然后是下一个方块我想画在轴上的+5处。

     gl.glTranslatef(0.0f, 0.0f, -5.0f);     // move 5 units INTO the screen
     square.draw(gl);

     gl.glTranslatef(0.0f, 0.0f, 10.0f);     // move 10 units to compensate for last point
     square2.draw(gl);

我现在的另一个问题是我的两个方形类具有不同的matirx,以便它们可以从另一侧看到。有没有办法只有一个方形的类,当我绘制它而不是完全不同的类时改变其面对的方式?

1 个答案:

答案 0 :(得分:4)

glPushMatrix glPopMatrix

 glPushMatrix();
 gl.glTranslatef(0.0f, 0.0f, -5.0f);     // move 5 units INTO the screen
 square.draw(gl);
 glPopMatrix();

 glPushMatrix();
 gl.glTranslatef(0.0f, 0.0f, +5.0f);     // move 10 units to compensate for last point
 square2.draw(gl);
 glPopMatrix();

修改

glPushMatrix 创建当前活动矩阵的副本(在当前矩阵模式和堆栈中)并将其推送到矩阵堆栈的顶部。所有矩阵运算都发生在矩阵堆栈的顶部。 glPopMatrix 删除堆栈顶部的矩阵,以便所有进一步的矩阵运算(在当前矩阵模式和堆栈中)对使用相应推送保存的矩阵进行操作。

请注意,使用OpenGL-ES 2和OpenGL 3及更高版本时,不再有矩阵操作功能,所以现在这一点都有点麻烦。

第二个子问题的更新

  

我现在的另一个问题是我的两个方形类具有不同的matirx,以便它们可以从另一侧看到。有没有办法只有一个方形的类,当我绘制它而不是完全不同的类时改变其面对的方式?

只需将第二个矩阵设为类成员,并按类构造函数设置它。实际上,我真的不明白你的问题。代码示例会有所帮助。