2011-04-22 115 views
0

我在写一个基于openGL和qt的简单应用程序。它创建原始图形(例如三角形),旋转用户可以通过使用三个旋转箱 (坐标:x,y,z)中的一个来更改。问题是局部坐标系。它对于Y轴和Z轴的变化和正常工作,但对X不适用。局部轴X总是与全局轴X重合。因此,当我绕Y轴旋转90'时,轴X和Z平行,因为局部Z发生了变化(如I预计)和本地X没有改变。这里是我的paintGL()函数的片段:OpenGL旋转?

  • glRotatef(rot [0],1.0,0,0); glRotatef(rot [1],0,1.0,0); glRotatef(rot [2],0,0,1.0);以及其中,glRotatef(rot [2],0,0,1.0)。
+0

你将需要发布所有相关的代码。事实上,上面的代码很好,但你可能会碰到Gimbal锁。 rot [0],rot [1]和rot [2]的值是什么? – 2011-04-22 20:38:31

+0

你的代码是什么样的?使用glPushMatrix()和glPopMatrix()方法可以解决局部坐标轴转换问题。 查看OpenGL SuperBible第4版的第3章。 – 2am 2013-04-22 05:03:59

回答

0

您应该使用旋转矩阵,它可以让您指定旋转轴和旋转角度: http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle

一般来说是不与欧拉角度进行旋转一个好主意:下一个问题,你会来到我身边是180度翻转一定角度的星座。这个问题广泛地被称为具有欧拉角的gimbal lock

+0

旋转应该用四元数表示:http://en.wikipedia.org/wiki/Quaternion – Paul 2011-08-01 11:43:14