我在原点有一个正方形。首先,我想旋转它。然后,将它从原点平移 5 个单位。
旋转后,我想将它平移 5 的距离。但是当我实现下面的代码时。它不会把它翻译到我想要的地方。什么是正确的翻译方法。
glTranslatef( 5,5, 5); glRotatef(45, x,y,z);
如果您的正方形中心位于原点,则 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 );
希望这可以帮助