Что делать с кватернионом при смене базиса? Привет, %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
158 +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 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 333 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир