opengl - gltranslatef glrotate错误?

时间:2015-04-18 13:24:44

标签: c++ opengl 3d

我正在绘制一个我想在其自己的3轴上移动的立方体(而不是基本坐标中的那些)。立方体永远不会位于原点上,这就是我需要使用glTranslatef()函数的原因。

我不明白:

当我在y轴上旋转立方体时,一切都很顺利。当我尝试在x轴上旋转它时,它无法正常工作:它开始移动我的屏幕,并且不会停留在它的位置。

工作正常: (我的立方体在自己的轴上旋转,同时保持在自己的位置(0,0.5,0))

glTranslatef(0, 0, 0);
glRotatef(getCubeAngle(), 0.0f, 1.0f, 0.0f); 
glTranslatef( 0.5, 0, 0.0); 

不能正常工作: (立方体在自己的轴上旋转+立方体开始沿着x轴在我的屏幕上移动)

   glTranslatef(0, 0, 0);
   glRotatef(getCubeAngle(), 0.0f, 1.0f, 0.0f); 
   glTranslatef( 0.5, 0, 0.0);
/*glTranslatef( 0.0, 0.5, 0.0); with this line instead it works well*/

为什么?

1 个答案:

答案 0 :(得分:0)

旋转矩阵将始终使用(当前)原点作为旋转中心。如果要围绕不同的点旋转,则需要先进行平移,以使轴心点成为本地原点。

我不知道你的立方体在物体空间中的实际坐标是什么,所以我不知道中心到底在哪里。 但是从你的描述可以得出,中心在(-0.5,0,0),你当前用作旋转中心。请记住,翻译的顺序是倒置到你可能期望的。您的代码首先转换为(0.5,0,0),然后转换。

我的猜测将是你的立方体实际上已经在原点居中,你只是向后转换顺序。

相关问题