1

我只是想完全清楚。我还是 Open GL 的新手,主要是通过反复试验来学习。

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

我从那一点开始绘制的任何东西都会在指定的轴上旋转指定的量?

那么我将如何撤消这样的轮换呢?

    glRotatef(45, 0, 0, 1);
    // draw object
    glRotatef(0, 0, 0, 0);

那行得通吗?

为了清楚我需要什么,当用户在屏幕上拖动手指时,它会以给定的角度绘制一条线,我正在采用该角度并将其应用于带纹理的正方形。

我在这个正方形之前和之后绘制了许多我不想旋转的对象。

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

4

1 回答 1

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 序列。

于 2012-08-04T22:55:49.507 回答