-1

我在原点有一个正方形。首先,我想旋转它。然后,将它从原点平移 5 个单位。

旋转后,我想将它平移 5 的距离。但是当我实现下面的代码时。它不会把它翻译到我想要的地方。什么是正确的翻译方法。 glTranslatef( 5,5, 5); glRotatef(45, x,y,z);

4

1 回答 1

0

如果您的正方形中心位于原点,则 glTranslatef 然后 glRotatef。

要围绕自定义中心旋转,这是通用公式:

TranslationFromRotCenterToOrigin * RotationMatrix * TranslationFromOriginToRotCenter

这在 OpenGL 中以相反的顺序给出了一些东西(导致 glTranslatef/glRotatef 将当前的 OpenGL 矩阵乘以指定的平移/旋转矩阵)

glLoadIdentity();
glTranslatef( 5, 5, 5);
glTranslatef( toRotCenterX, toRotCenterY, toRotCenterZ );
glRotatef( 45, x, y, z );
glTranslatef( -toRotCenterX, -toRotCenterY, -toRotCenterZ );

希望这可以帮助

于 2013-10-11T11:33:15.517 回答