Как отмечает Люциус в своем комментарии, матрица представляет собой последовательность линейных преобразований. Порядок, в котором вы умножаете их вместе, важен.
RotationMatrix
* TranslationMatrix
означает «Поверните эту модель вокруг своей оси в пространстве модели, а затем переведите повернутую модель в мировое пространство».
TranslationMatrix
* RotationMatrix
означает «Перевести эту модель в мировое пространство, а затем повернуть модель по всему миру».
Измените порядок умножения матриц.
В качестве альтернативы, умножающиеся матрицы с использованием оператора *
могут быстро стать дорогими, когда вы начинаете добавлять в последовательность больше преобразований; он может создать много дополнительных матриц, которые никогда не используются. Вы можете оптимизировать это, используя статический метод Multiply()
класса Matrix
.
Вы пытались изменить порядок умножения? В зависимости от реализации «матрицы» перевод может быть применен до поворота, тем самым изменяя центр вращения. – Lucius