maya和Unity中的坐標系旋轉


maya軟件是用的右手坐標系,默認旋轉順序是ZYX,即先繞Z軸旋轉,再繞Y軸旋轉,最后繞X軸旋轉。

比如在maya軟件中,右側的旋轉順序是可選的,默認的選擇是“XYZ”,其實物體旋轉順序是倒着念,即上面所說的ZYX旋轉順序。

有興趣的朋友可以進行驗證。

Unity軟件是用的左手坐標系,旋轉順序是YXZ(貌似不能更改),即先繞Y軸旋轉,再繞X軸旋轉,最后繞Z軸旋轉。

在上面的兩個圖中,由MAYA的模型導出FBX格式,然后再導入到Unity中,選中的是同一個關節:Jamie_R_Thumb_1

其在MAYA中的旋轉數據是:

關節方向:(55.921,-47.560,-62.725)
旋轉:(0.00022.60017.700

其在Unity中的旋轉數據是:

Rotation:(7.88552346.2820117.52884)
Quaternion:(x,y,z,w) = (0.1222290.3778530.1130740.9107697// 查看對象的四元數屬性,可以在Inspector上單擊右鍵,選擇Debug模式即可
// 這里的Rotation和Quaternion值相當於腳本中對象的transform.localRotation和transform.localEulerAngles的屬性值

下面進行分析驗證,並說明為什么在兩個軟件中同樣的關節狀態出現的屬性數值會不同(用到MATLAB工具):

//以下MATLAB代碼
//把maya中關節方向歐拉角數據轉換成四元數
//這里旋轉順序是寫成“ZYX”,而且需要把角度值轉換成弧度值
>> q1 = angle2quat(-62.725*pi/180,-47.560*pi/180,55.921*pi/180,'ZYX')
       
q1 =
       
    0.7886    0.1810   -0.5274   -0.2592
       
//把maya中旋轉歐拉角數據轉換成四元數
//這里旋轉順序是寫成“ZYX”,而且需要把角度值轉換成弧度值
>> q2 = angle2quat(17.700*pi/180,22.600*pi/180,0.000*pi/180,'ZYX')
       
q2 =
       
    0.9689   -0.0301    0.1936    0.1509
       
//兩個四元數進行乘法運算,在Unity的腳本中的*運算符也表示這個意思,
//這表示物體先做q1旋轉運動,再做q2的旋轉運動,得出兩次運動后的四元數狀態
//這里已經可以把q3和Unity中此關節的四元數數值進行比較,看有什么不同
>> q3 = quatmultiply(q1,q2)
       
q3 =
       
    0.9108    0.1222   -0.3779   -0.1131
       
//繼續把得到的q3值轉換成歐拉角
//但這里的旋轉順序已經是Unity中的“YXZ”了
>> [pitch,roll,yaw] = quat2angle(q3,'YXZ')
       
pitch =
       
   -0.8078
       
       
roll =
       
    0.1376
       
       
yaw =
       
   -0.3059
       
//弧度值轉換成角度值,並且把角的順序調整過來
>> a = [roll,pitch,yaw] * 180/pi
       
a =
       
    7.8860  -46.2822  -17.5285

最后得出的歐拉角度是:(7.8860  -46.2822  -17.5285)

而Unity中的Rotation數據是:(7.885523,46.28201,17.52884)

至於繞Y軸旋轉和繞Z軸旋轉的數值正負號的區別,是因為在MAYA和Unity中所采用的左右手坐標系的不同所造成的,可以參考:

http://answers.unity3d.com/questions/355897/orienting-an-object-the-same-in-maya-and-unity.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM