У меня есть проблема с пониманием кватернионов.
Чтобы объект моего мира вращался правильно, мне нужно инвертировать их вращение кватерниона при обновлении матрицы мира объекта.
Я создаю вращение объекта с помощью этого кода:
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);
Почему я должен инвертировать вращение объекта?