Матрица вращения кватернионов неожиданно имеет противоположный смысл - PullRequest
3 голосов
/ 20 сентября 2011

У меня есть проблема с пониманием кватернионов.

Чтобы объект моего мира вращался правильно, мне нужно инвертировать их вращение кватерниона при обновлении матрицы мира объекта.

Я создаю вращение объекта с помощью этого кода:

Rotation = Quaternion.RotationMatrix(
               Matrix.LookAtRH(Position, 
               Position + new Vector3(_moveDirection.X, 0, _moveDirection.Y),
               Vector3.Up)
           );

и обновите объектную матрицу мира следующим образом:

Object.World = Matrix.RotationQuaternion(Rotation) 
               * Matrix.Translation(Position);

Это не работает; он заставляет объект вращаться в противоположном направлении по сравнению с тем, что должен!

Это способ, которым мой объект вращается правильно:

Object.World = Matrix.RotationQuaternion(Quaternion.invert(Rotation))
               * Matrix.Translation(Position);

Почему я должен инвертировать вращение объекта?

1 Ответ

0 голосов
/ 08 ноября 2012

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

Однако вам не нужно принимать явное обратное.Просто поменяйте местами порядок первых двух аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...