2009-08-04 18 views
2

我製作了一個非常簡單的3d場景,在世界座標中有5個點。我想在場景中導航,因此我正在定義一個具有UP和OUT矢量的相機。有了這些信息,我可以在每個幀中生成一個旋轉矩陣,我將其應用於矢量以獲取相機座標。這會造成雲臺鎖嗎?

問題是:我已經讀過關於萬向節鎖作爲使用這種方法的問題,但會發生在這種情況下?

請注意,我在每幀中生成旋轉矩陣,並且不是累積旋轉。那麼在這種情況下會發生鎖定嗎?如果是這種情況,你會建議如何安全地應用旋轉(從UP和OUT矢量)?

謝謝

回答

4

如果通過OUT表示您的意思是「向前」,並且這總是垂直於UP向量,那麼NO,您將不會遇到萬向節鎖定。

你正在做的是從UP和FORWARD向量創建一個方向矩陣,並應用每個幀,這是一種在空間移動攝像機的相當常見的方法。 您不使用歐拉角度進行多次旋轉,這可能是萬向節鎖定的原因。

注意要創建矩陣,您還需要從UP和FORWARD向量創建一個「左」(或右)向量。一個很好的介紹是here - 請注意,該示例然後將旋轉應用於相機矩陣,這是一個完全可選的步驟。

維基百科對gimbal lock有很好的解釋。

+0

謝謝Justicle,這正是我正在做的。我稱之爲OUT矢量是你的前進。用這個(並且應用交叉乘積來得到第三個向量),我生成一個正交矩陣,然後乘以這些向量以得到它們的變換。 感謝您的確認。我在某種程度上肯定萬向節鎖不適用於這種情況,但爲了以防萬一,我想確保萬無一失。 – 2009-08-04 02:16:33

1

你會用矩陣的方法來產生旋轉矩陣(對X,Y,Z),然後將它們相乘得到最終的旋轉矩陣時遇到萬向鎖問題。如果我已經理解你會的,你使用OUT矢量來獲得角度(alpha,beta,gamma),然後你正在計算矩陣,最後 - 你將它們相乘得到最終的roation矩陣 - 那麼是的,你會遇到gimbal lock。

擺脫此問題的一種方法是使用Quaternions進行計算。

另外,here我發現了一些關於如何實現這些的OpenGL教程。