我覺得解釋的最清楚的一片文章,如果看了還不懂,自己面壁去吧。
————————————————————————————————————————————
我們通常認為當前世界是乙個三維的世界,用座標系來表示就是xyz,在3d遊戲世界裡也是用這樣的三維座標系來表示的。
x代表水平座標,y代表垂直座標,z代表的是由螢幕往裡的乙個深度座標,也就是垂直於螢幕的座標軸。
如下圖,在乙個3d世界裡,綠色代表y座標,紅色代表x座標,而垂直於螢幕的藍色是z座標。
那麼什麼是萬向節鎖?
其實就是乙個物體在乙個3d世界裡面隨著旋轉順序和旋轉角度的改變,導致物體只能在乙個固定的平面旋轉,無法旋轉到你預想的角度。
由於物體的旋轉,物體的座標軸方向也發生了改變,導致其中2條座標軸發生了重合。
當你圍繞著重合的座標軸旋轉時,物體的旋轉方向始終在乙個平面上旋轉。
比如在unity3d 中我們把乙個物體按照先沿x軸旋轉90度。
此時物體的座標軸也發生了改變,那麼是哪個軸發生了改變呢?
可以自行想象一下。
其實只有y軸發生了改變,由於物體圍繞x旋轉了90度,那麼這個時候的y軸也圍繞x旋轉了90度,也是和原來的z軸重合了,原來的y軸是由人物的腳指向頭這個方向的,當人物圍繞x軸旋轉90度後。
y軸還是按照由人物的腳的方向指向了頭,也就剛好是垂直於螢幕的。
這樣就導致了,當前的y軸和原來的z軸重合了。
這個時候你可能會想既然y軸改變了,z軸也會改變啊,原來的z軸是從人物的身體由螢幕外指向螢幕裡的,那麼當物體圍繞x軸旋轉後,那麼此時z軸還是應該由人物的身體穿過人物的背面,也就是當前的綠色座標軸。
按照我們的社會經驗物體圍繞x軸旋轉90度後,z軸和y軸只是交換了位置而已啊。
但是其實在3d遊戲世界裡面不是這樣去定義的。
而是按照陀螺儀的原理去解釋的。
我們看下圖,乙個陀螺儀裝置:
圓盤稱為轉子,豎軸稱為旋轉軸。轉子用金屬製成,增加質量,從而增大慣性。豎軸外側是三層巢狀的圓環,它們互相交叉,帶來了三個方向自由度的旋轉。
簡單分解後就是如下圖
那麼當綠色圓盤圍繞它的轉軸旋轉時,並不會改變紅色和藍色旋轉軸方向的變化。
當紅色圓盤圍繞著它的轉軸旋轉時,綠色圓盤的轉軸方向發生了改變。
當藍色的圓盤圍繞著它的轉軸旋轉時,綠色和藍色的轉軸方向都發生了改變。
當紅色圓盤圍繞轉軸旋轉90度後
綠色圓盤的旋轉和藍色圓盤的旋轉都在同乙個平面上旋轉了,只要紅色圓盤不發生改變,不管如何旋轉綠色和藍色圓盤都無法解除這種狀態。
如在unity3d中當把物體旋轉圍繞x軸旋轉90度後。
把人物圍繞y軸再旋轉40度後:
如果開始只把物體圍繞x軸旋轉89度的話,結果又會不同了
萬向節鎖 簡單解釋
以前一直以為自己已經清楚了這是怎麼回事,也沒去細想,然而最近又遇到角度的問題,發現還是迷糊,於是又靜下心來看了網上的相關文件,並以直白簡單的方式分享一下。還是以unity為例吧 首先,萬向節鎖只發生於以模型自身座標系旋轉的情況下,就是 transform.localeulerangles 這種,而 ...
萬向節鎖 簡單解釋
以前一直以為自己已經清楚了這是怎麼回事,也沒去細想,然而最近又遇到角度的問題,發現還是迷糊,於是又靜下心來看了網上的相關文件,並以直白簡單的方式分享一下。還是以unity為例吧 首先,萬向節鎖只發生於以模型自身座標系旋轉的情況下,就是 transform.localeulerangles 這種,而 ...
萬向節鎖 Gimbal Lock 的理解
目錄我直接丟擲結論 gimbal lock 產生的原因不是尤拉角也不是旋轉順序,而是我們的思維方式和程式的執行邏輯沒有對應,也就是說是我們的觀念導致這個情況的發生。首先我們看一下尤拉角的定義 用一句話說,尤拉角就是物體繞座標系三個座標軸 x,y,z軸 的旋轉角度。在這裡,座標系可以是世界座標系,也可...