gltranslatef glrotate error?

gltranslatef glrotate error?

本文关键字:error glrotate gltranslatef      更新时间:2023-10-16

我正在绘制一个立方体,我想在它自己的 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*/

为什么?

旋转矩阵将始终使用(当前)原点作为旋转的中心。当你想绕不同的点旋转时,你需要先平移,使枢轴点成为局部原点。

我不知道你的立方体在对象空间中实际上有什么坐标,所以我不知道中心到底在哪里。但是从你的描述中可以得出中心不在(-0.5,0,0),你目前将其用作旋转中心。请记住,翻译的顺序与您可能期望的顺序相反。代码首先按 (0.5,0,0) 进行转换,然后旋转。

我的猜测是,你的立方体实际上已经以原点为中心,你只是得到了变换的顺序。

相关文章: