Что делать с кватернионом при смене базиса? Привет, %user%.
Есть проблема, настраиваю экспорт геометрии из Unity3D в самописный движок, построенный на базе XNA/DirectX.
И дело в том, что в Unity3D базис пространства (условно): vec3(1, 1, 1), а в XNADirectX — vec3(-1,1,1) (относительно Unity3D).
При переносе геометрии достаточно учесть (локально для каждой модели) —
newVec3 = vertexVec3 * vec3(-1, 1, 1);
С трансформацией частично понятное дело, позицию и размер умножаем на vec3(-1, 1 ,1). Но трансформация и у меня и у юнити хранится в виде SRT (2 вектора на размер и на позицию и 1 кватернион). Так вот, как сменить у кватерниона базис в этом случае?

21 Авг 2019 в 06:13
183 +1
1
Ответы
1

Для смены базиса у кватерниона вам нужно преобразовать его относительно нового базиса координат. Для этого можно создать матрицу поворота, которая представляет собой инвертированную матрицу перехода от старого базиса к новому. Затем умножьте кватернион на эту матрицу, чтобы преобразовать его в новый базис.

Вот пример кода на C# для преобразования кватерниона в новый базис:

Quaternion originalQuaternion = // ваш исходный кватернион
Matrix4x4 basisMatrix = Matrix4x4.Scale(new Vector3(-1, 1, 1)); // матрица перехода от старого базиса к новому
Matrix4x4 rotationMatrix = Matrix4x4.Rotate(originalQuaternion); // преобразуем кватернион в матрицу поворота
Matrix4x4 newRotationMatrix = basisMatrix * rotationMatrix; // умножаем матрицу поворота на матрицу перехода
Quaternion newQuaternion = Quaternion.FromRotationMatrix(newRotationMatrix); // получаем новый кватернион в новом базисе
// используйте newQuaternion в вашем коде для трансформации объектов

Этот код предполагает, что вы используете C# и Unity3D. Примените подходящие функции и классы для вашего движка, если он отличается от Unity3D/XNA/DirectX. Также убедитесь, что матрицы и кватернионы правильно интерпретируются и используются в вашем движке для преобразования объектов.

20 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир