2015-02-24 112 views
0

嗨我想旋轉openGL相機使用我的手機的陀螺儀。我能夠得到三個角度(X,Y,Z),但我找不到將它們轉換爲gluLookAt所需的方向矢量的方法。 相機被放置在(0,0,0),並應該做出與手機本身相同的旋轉。gluLookAt從陀螺儀角度向量

回答

0

gluLookAt需要三個矢量參數來計算正確的視圖矩陣。眼睛的位置(在你的情況下(0,0,0)),中心位置(照相機正在看的地方)和向上的向量(這裏是攝像機的「向上」方向)。

選擇初始攝像機方向後,對於許多應用,中心將爲(0,0,1)和向上方向(0,1,0)。你需要旋轉這些向量所需的角度。爲此,您可以將它們與旋轉矩陣R = Rx * Rz * Ry相乘,其中Rx,z,y是給定軸上給定角度的旋轉矩陣。如果您使用glm,eigen或類似的任何數學軟件包,您可以輕鬆構建這些軟件包。你甚至可以自己實現它們(http://en.wikipedia.org/wiki/Rotation_matrix)。

請注意,如果眼睛位置不是(0,0,0),則必須旋轉方向矢量,而不是中心矢量。方向矢量=中心 - 眼睛。

所以,有點僞代碼:

vec3 eye = ..... 
vec3 initCenter = ..... 
vec3 initDirection = initCenter - eye; 
vec3 initUp = ..... 
mat3 rotation = rotate((1,0,0),xAngle) * rotate((0,1,0),yAngle) * rotate((0,0,1),zAngle); 
gluLookAt(eye,eye + rotation*initDirection,rotation*initUp) 

實現可能看起來有點不同,你可能需要使用vec4/MAT4,例如GLM產生尺寸4×4的旋轉矩陣。

+0

我試過旋轉矩陣,但繞軸的旋轉不可交換,當我將手機旋轉90°時,軸「翻轉」 – Rosh 2015-02-24 16:15:58

+0

發生這種情況時,最好在這種情況下使用四元數。 – Smaug 2015-02-24 16:18:51

+0

好的,謝謝你:)你能請指導我去關於四元數的教程。另外一個圖書館使用它們會很好(我正在編程一個Android應用程序) – Rosh 2015-02-24 16:24:15