unity中歐拉角用的是heading - pitch -bank系統(zxy慣性空間旋轉系統):
當認為旋轉順序是zxy時,是相對於慣性坐標系旋轉。
當認為旋轉順序是yxz時,是相對於物體坐標系旋轉。
另外一種常用的歐拉角系統是roll - pitch - yaw系統(zxy物體空間旋轉系統),對於此系統:
當認為旋轉順序是zxy時,是相對於物體坐標系旋轉。
當認為旋轉順序是yxz時,是相對於慣性坐標系旋轉。
----
萬向鎖:
http://player.youku.com/player.php/sid/XNzkyOTIyMTI=/v.swf
----
如下圖,將x軸作為y軸的子節點,將z軸作為x軸的子節點。那么此裝置屬於哪種歐拉角系統?
判斷方法1:
假設對此系統按yxz的順序進行旋轉,則:
1,首先繞y軸旋轉,子節點x,z軸會發生變化。
2,再繞x軸旋轉,由於上一步中x已發生變化,所以是繞變化后的x軸旋轉。由於z軸是x軸子節點,所以z軸發生變化。
3,再繞z軸旋轉,由於前兩步中z軸已發生變化,所以是繞變化后的z軸旋轉。
由此可見,按yxz順序旋轉的話,每一步都是在上一步變化后的基礎上進行旋轉,即每一步都是相對於當前物體坐標系進行旋轉,所以此系統是“yxz物體空間旋轉系統”,即正是unity所采用的歐拉角系統。
判斷方法2:
假設對此系統按zxy的順序進行旋轉,則:
1,首先繞z軸進行旋轉,由於z軸是終端節點,所以x軸和y軸都不會發生變化。
2,再繞x軸進行旋轉,由於x軸在上一步旋轉中沒有發生變化,所以就等價於繞慣性空間的x軸旋轉。由於y軸是x軸父節點,所以y軸不會發生變化。
3,再繞y軸進行旋轉,由於y軸在上一步旋轉中沒有發生變化,所以就等價於繞慣性空間的y軸旋轉。
由此可見,按zxy順序旋轉的話,每一步都等價於相對於慣性坐標系進行旋轉,所以此系統是“zxy慣性空間旋轉系統”,即正是unity所采用的歐拉角系統。
----
下圖列舉出各種旋轉順序的“物體空間旋轉系統”的萬向鎖情況:
可見,萬向鎖就是:在指定旋轉順序下,繞第二軸旋轉正或負90至使一三兩軸平行或反向平行,一三兩軸成了等效軸,於是物體由原來的可繞三個軸旋轉變為只能繞兩個軸旋轉,丟失了一個旋轉自由度。
另外還還可以看到,當發生萬向鎖時,rotation所對應的歐拉角不唯一,如果一三兩軸平行,則繞第一軸的旋轉角A1和繞第三軸的旋轉角A3之和不變即可保證rotation不變;如果一三兩軸反向平行,則只要A1和A3之差不變,即可保證rotation不變。