2016-12-30 9 views
0

У меня, к сожалению, нет опыта вычисления матриц/эйлеров, но нужно решить следующее в C# , в Unity для соответствия ориентации.C#: преобразование вращения MAYA (yUp, righthand, xyz order) для вращения UNITY (yUp, left left, zxy order)

конвертировать:

3 поплавков (ориентация) объект, происходящий из майя (YUP, правая рука, вращение хуга порядка)

к: вращения кватернионов в единстве (да, левая рука, ZXY вращение заказ)

любой ввод приветствуется! м.

+0

Вам нужен 'Quaternion.Euler'. Что-то вроде 'transform.rotation = Quaternion.Euler (x, y, z);' – Programmer

+0

спасибо, что «что-то» - это всего лишь сложная часть. ;-) –

+0

Есть ли у вас возможность передавать данные майя в какой-либо другой форме, например, в виде матрицы? Преобразование ручной работы и преобразование эйлеров действительно являются отдельными проблемами, и их расщепление упрощает работу – theodox

ответ

0

Quaternions можно использовать для обозначения ориентации или вращения объекта. Это зависит от Pivot от GameObject. посмотрите here

+0

за вклад. –

+0

Но я изо всех сил пытаюсь понять, как я должен изменить исходные значения, чтобы перейти к новому действительному вращению эйлеров, из которого я тогда могу создать кватернион. Эта последняя часть кажется легкой, так как для этого есть funtion. –

+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);
  • // ротация
  • 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».