OpenGL glRotate和glTranslate的顺序问题

4

我正在尝试围绕轴旋转一个立方体,我的操作如下:

    glTranslatef(0.0f, 0.0f, -60.0f);
    glRotatef(angle, 0.0f, 1.0f, 0.0f);

我希望它能够在y轴上绕圆形移动到-60,并围绕该点旋转,但实际上它只是在-60坐标处自转。当我像这样编写代码时:

    glRotatef(angle, 0.0f, 1.0f, 0.0f);
    glTranslatef(0.0f, 0.0f, -60.0f);

我得到了我需要的,但我不明白为什么? 他们为什么要做相反的事情? 能有人解释一下吗?

1
矩阵乘法不满足交换律... - Ben Voigt
1个回答

5
当您应用变换时,它是局部应用的。可以将其视为一个坐标系,您正在移动该坐标系。您从表示视图的坐标系开始,然后相对于自身转换该坐标系。因此,在第一种情况下,您将沿着坐标系的Z轴将坐标系平移-60,然后您将围绕新原点的新Y轴旋转坐标系。然后您所绘制的任何内容都将在该新坐标系中绘制。
这实际上提供了一种思考变换的更简单方法,一旦您习惯了它,就不必再记住两个单独的坐标系:一个用于应用变换的坐标系,另一个用于绘制几何形状的坐标系。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接