3D遊戲世界裡的萬向節鎖

2021-09-24 09:27:22 字數 1839 閱讀 7507

我覺得解釋的最清楚的一片文章,如果看了還不懂,自己面壁去吧。

————————————————————————————————————————————

我們通常認為當前世界是乙個三維的世界,用座標系來表示就是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軸 的旋轉角度。在這裡,座標系可以是世界座標系,也可...