OpenGL glRotate 和 glTranslate 顺序

Vla*_*adp 4 opengl translation rotation matrix

我正在尝试围绕轴旋转一个立方体,我正在做的是:

    glTranslatef(0.0f, 0.0f, -60.0f);
    glRotatef(angle, 0.0f, 1.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)

我期望它移动到 -60 并围绕 y 轴旋转,但它只是在 -60 坐标处围绕它自己旋转。当我这样写时:

    glRotatef(angle, 0.0f, 1.0f, 0.0f);
    glTranslatef(0.0f, 0.0f, -60.0f);
Run Code Online (Sandbox Code Playgroud)

我得到了我需要的东西,但我不明白为什么?他们为什么要反其道而行之?有人可以解释一下。

Vau*_*ato 5

当您应用转换时,它会在本地应用。将其视为您正在四处移动的坐标系。您从代表您的视图的坐标系开始,然后相对于其自身变换该坐标系。因此,在第一种情况下,您将沿坐标系的 Z 轴平移坐标系 -60,然后在新原点处围绕新 Y 轴旋转坐标系。您绘制的任何内容都将在该新坐标系中绘制。

一旦你习惯了它,这实际上提供了一种更简单的方式来考虑转换。您不必记住两个单独的坐标系:一个用于应用变换的坐标系,另一个用于绘制几何图形的坐标系。