OPENGL ES glRotatef

时间:2012-08-04 22:39:53

标签: java android graphics opengl-es

我只想完全清楚。我还是Open GL的新手,主要通过试用和学习来学习错误。

当我使用glRotatef(angle,x,y,z)

从该点开始绘制的任何内容都将在指定的轴上旋转指定的数量?

那么我该如何撤消这种轮换?

    glRotatef(45, 0, 0, 1);
    // draw object
    glRotatef(0, 0, 0, 0);
那会有用吗?

要清楚我需要什么,当用户在屏幕上拖动手指时,它会以给定角度绘制一条线,然后我将该角度应用到纹理方块。

我怎么能在这个正方形之前和之后绘制很多物体,我不想旋转。

到目前为止,我认为可以肯定地说,当您应用转换/旋转/平移/纹理时,直到您指定其他方式,它将保持这种状态?

1 个答案:

答案 0 :(得分:4)

OpenGL转换常见问题解答包括:http://www.opengl.org/archives/resources/faq/technical/transformations.htm

你可以计算每个变换操作的倒数,我很确定在这种情况下正确的方法是glRotatef(-45, 0, 0, 1)。当您开始添加比例并转换为混音时,这很快变得复杂。一个更简单的解决方案是使用glPushMatrixglPopMatrix

包装转换

例如:

// save the current matrix state
glPushMatrix() 

// Transform
glTranslate(...)
glRotate(...)

// Issue a draw call
glDrawArrays(...)

// Restore the transformation matrix to when it was saved.
glPopMatrix()

在弹出矩阵之后,您可以继续进行商业活动,就像转型从未发生过一样。 这对于层级转换也非常有用,因为你可以在彼此内部有多个push-pop序列。