OpenGL旋转?

OpenGL旋转?,opengl,Opengl,我正在编写一个基于openGL和qt的简单应用程序。它创建基本体(例如三角形),旋转用户可以使用三个旋转框中的一个来更改该基本体 (坐标:x,y,z)。问题是局部坐标系。它在Y轴和Z轴上变化并正常工作,但在X轴上不正常。局部X轴始终与全局X轴重合。因此,当我将图形绕Y轴旋转90'时,X轴和Z轴平行,因为局部Z发生了变化(如我所料),而局部X没有发生变化。下面是我的paintGL()函数的片段: glRotatef(rot[0],1.0,0,0) glRotatef(rot[1],0,1.0,0

我正在编写一个基于openGL和qt的简单应用程序。它创建基本体(例如三角形),旋转用户可以使用三个旋转框中的一个来更改该基本体 (坐标:x,y,z)。问题是局部坐标系。它在Y轴和Z轴上变化并正常工作,但在X轴上不正常。局部X轴始终与全局X轴重合。因此,当我将图形绕Y轴旋转90'时,X轴和Z轴平行,因为局部Z发生了变化(如我所料),而局部X没有发生变化。下面是我的paintGL()函数的片段:

  • glRotatef(rot[0],1.0,0,0)
  • glRotatef(rot[1],0,1.0,0)
  • glRotatef(rot[2],0,0,1.0)
您应该使用旋转矩阵来指定旋转轴和旋转角度:


通常,使用欧拉角执行旋转不是一个好主意:下一个问题是在特定角度星座中180度翻转。这个问题被广泛称为欧拉角。

您需要发布所有相关代码。实际上,上面的代码很好,但您可能会遇到万向节锁。rot[0]、rot[1]和rot[2]的值是什么?您的代码看起来像什么?局部轴变换问题可用glPushMatrix()和glPopMatrix()方法解决。查看OpenGL SuperBible第四版第3章。旋转应使用四元数表示: