2011-04-22 184 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