OPENGL ES glRotatef



我只想说清楚。我仍然是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).当您开始添加比例并转换为混合时,这很快就会变得复杂。一个更简单的解决方案是用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 序列。

相关内容

  • 没有找到相关文章

最新更新