2013-03-22 5 views
1

У меня проблема с моим вращением. Моя модель вращается, но затем слегка отклоняется от положения угла камеры не в центре. Вот мой код вращения, это правильно?3D-поворот и угол камеры?

matrix m = matrix.createrotationZ(MathHelper.ToRadian(30)) 
matrix object = matrix.createtranslation(objectPos) * m; 
+0

Вы пытались изменить порядок умножения? В зависимости от реализации «матрицы» перевод может быть применен до поворота, тем самым изменяя центр вращения. – Lucius

ответ

1

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

RotationMatrix * TranslationMatrix означает «Поверните эту модель вокруг своей оси в пространстве модели, а затем переведите повернутую модель в мировое пространство».

TranslationMatrix * RotationMatrix означает «Перевести эту модель в мировое пространство, а затем повернуть модель по всему миру».

Измените порядок умножения матриц.

В качестве альтернативы, умножающиеся матрицы с использованием оператора * могут быстро стать дорогими, когда вы начинаете добавлять в последовательность больше преобразований; он может создать много дополнительных матриц, которые никогда не используются. Вы можете оптимизировать это, используя статический метод Multiply() класса Matrix.

Смежные вопросы