Unity 歐拉角萬向節鎖的原理

網上文章很多,有些寫的很詳細,但是我個人理解起來有不是很順暢,把幾個重要的知識點整理一下

歐拉角:歐拉角用於控制物體的旋轉角度,在Unity中歐拉角的表示就是一個Vector3,例如  Vector3 v3 = new Vector3(30,30,30)

    Unity的歐拉角旋轉順序是 Z-X-Y,這個旋轉順序在不同的軟件,行業有所不同,沒有一個全球統一標準。

旋轉順序:同樣的輸入值,不同的旋轉順序,得到的結果不同

靜態歐拉角:旋轉的參考座標系保持不變(Space.World),這種情況不產生萬向節鎖

動態歐拉角:旋轉的參考座標系爲物體自身的局部座標系(Space.Self),特定情況下會產生萬向節死鎖

萬向節死鎖中間旋轉順序軸(X)旋轉90°,使前順序軸(Z)和世界座標系的後順序(Y)軸重疊,這樣在世界座標系的觀察空間內,物體繞自己的Z軸旋轉,就跟物體繞着世界座標系的Y軸旋轉一樣,這樣看物體座標的Z軸自由度似乎消失了,這種情況就稱爲萬向節死鎖。

歐拉角存在多對一的關係,即物體的最終旋轉情況,可以用多個歐拉角來表示,例如 Vector3(90,30,30) 等價於 Vector3(90,20,20)

且慢,我剛剛,看到一個跟規定不符合的情況,Uniyt的旋轉順序似乎是 Y-X-Z !!!!!!爲什麼大家都說是Z-X-Y啊??

如果是Y-X-Z,我就不會困惑那麼久了啊!!!

我用文字表達一下:首先物體初始角度是Vector3(0,0,0),此時局部座標世界座標相同,假設要旋轉的歐拉角是Vector3 v3 = new Vector3(90,30,60),我們來分析一下過程,以世界座標系的角度來看到物體旋轉。先繞v3.y旋轉30°,因爲此時局部座標和世界座標重合,所以你看到物體繞着世界座標的Y軸旋轉,接着繞v3.x旋轉90°,旋轉後,局部座標的Z軸和世界座標的Y軸重合,接着繞着v3.z旋轉,從世界座標系來看就像是繞着Y軸旋轉,這樣一來,局部座標的Z軸旋轉似乎不起作用,似乎Z軸的自由度消失了!萬向節死鎖產生了!

簡單描述產生過程:Y-X-Z,一開始Y旋轉就是世界座標Y旋轉,X旋轉90°後,局部座標系Z和世界座標系Z重合,局部座標系Z旋轉看起來就是世界座標系Y旋轉

Over

發佈了53 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章