我只想说清楚。我仍然是Open GL的新手,主要通过反复试验来学习。
当我使用 glRotatef(angle, x, y, z)
我从该点开始绘制的任何内容都将在指定的轴上旋转指定的量?
那么我将如何撤消这样的旋转呢?
glRotatef(45, 0, 0, 1);
// draw object
glRotatef(0, 0, 0, 0);
这样行得通吗?
为了清楚我需要什么,当用户在屏幕上拖动手指时,它会以给定的角度绘制一条线,我正在采用该角度并将其应用于带纹理的正方形。
我怎么在这个正方形之前和之后画了很多我不想旋转的对象。
到目前为止,我认为可以肯定地说,当您应用转换/旋转/平移/纹理时,除非您指定其他明智,否则它会保持这种状态吗?
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 序列。