我只想完全清楚。我还是Open GL的新手,主要通过试用和学习来学习错误。
当我使用glRotatef(angle,x,y,z)
时从该点开始绘制的任何内容都将在指定的轴上旋转指定的数量?
那么我该如何撤消这种轮换?
glRotatef(45, 0, 0, 1);
// draw object
glRotatef(0, 0, 0, 0);
那会有用吗?
要清楚我需要什么,当用户在屏幕上拖动手指时,它会以给定角度绘制一条线,然后我将该角度应用到纹理方块。
我怎么能在这个正方形之前和之后绘制很多物体,我不想旋转。
到目前为止,我认为可以肯定地说,当您应用转换/旋转/平移/纹理时,直到您指定其他方式,它将保持这种状态?
答案 0 :(得分:4)
OpenGL转换常见问题解答包括:http://www.opengl.org/archives/resources/faq/technical/transformations.htm
你可以计算每个变换操作的倒数,我很确定在这种情况下正确的方法是glRotatef(-45, 0, 0, 1)
。当您开始添加比例并转换为混音时,这很快变得复杂。一个更简单的解决方案是使用glPushMatrix
和glPopMatrix
例如:
// 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序列。