2016-12-30 179 views
0

我很遺憾沒有矩陣/歐拉計算經驗,但需要在c#中解決以下問題: ,在Unity中進行方向匹配。c#:將MAYA旋轉(yUp,右手,xyz順序)轉換爲UNITY旋轉(yUp,左手,zxy順序)

轉換: 四元數旋轉在Unity(燁,左手,ZXY旋轉:從瑪雅(燁,右手,XYZ旋轉次序)

到始發的對象的

3浮筒(取向)訂單)

任何投入最受歡迎! m。

+0

你需要'Quaternion.Euler'。就像'transform.rotation = Quaternion.Euler(x,y,z);' – Programmer

+0

謝謝..那個'東西'確實是棘手的部分。 ;-) –

+0

您是否可以選擇像矩陣一樣傳遞Maya數據?手型轉換和歐拉轉換真的是分開的問題,分割它們使得事情更簡單 – theodox

回答

0

Quaternions可用於表示物體的方向或旋轉。這取決於GameObject的樞軸。看看here

+0

感謝您的輸入。 –

+0

但我很努力地理解我應該如何修改原始值以獲得新的有效的歐拉旋轉,然後我可以創建四元數。這最後一部分看起來很容易,因爲這有一個功能。 –

+0

取一個空的GameObject將其旋轉更改爲您的願望旋轉,然後使其他GameObject成爲它的子女 –

0

好吧,我得到了解決,用一個提示以下螺紋的朋友: https://forum.unity3d.com/threads/right-hand-to-left-handed-conversions.80679/ 該解決方案通過發佈用戶通過「guavaman」。

我現在正在使用的代碼是這樣的結構的:

  • //翻譯
  • 變種unityPosition =新的Vector3(-maya_translation.x,maya_translation.y,maya_translation.z);
  • // rotation
  • var flippedRotation = new Vector3(maya_euler_rotation.x,-maya_euler_rotation.y,-maya_euler_rotation.z);
  • var qx = Quaternion.AngleAxis(flippedRotation.x,Vector3.right);
  • var qy = Quaternion.AngleAxis(flippedRotation.y,Vector3.up);
  • var qz = Quaternion.AngleAxis(flippedRotation.z,Vector3.forward);
  • var unityRotationQuaternion = qz * qy * qx; //確切的順序!
  • //比例尺
  • var unityScaling = new Vector3(maya_scale.x,maya_scale.y,maya_scale.z);

感謝所有的投入和'guavaman'。