netlib.narod.ru | < Назад | Оглавление | Далее > |
Преобразования — это важный инструмент для манипуляций с объектами. Они позволяют вам позиционировать, ориентировать, деформировать и применять другие типы преобразований к объектам. Из всех различных типов преобразований наиболее часто используются перемещение, вращение и масштабирование.
Для помощи в обработке преобразований объектов вы создадите класс с именем Transformation. Этот класс хранит перемещение, вращение и масштабирование объекта и создает матрицу, содержащую комбинацию всех этих преобразований, как показано в приведенном ниже коде:
// Перемещение Vector3 translate; // Вращение вокруг мировых осей (X, Y, Z) Vector3 rotate; // Масштаб по осям X, Y, Z Vector3 scale; bool needUpdate; // Хранит комбинацию преобразований Matrix matrix; public Vector3 Translate { get { return translate; } set { translate = value; needUpdate = true; } } public Vector3 Rotate { get { return rotate; } set { rotate = value; needUpdate = true; } } public Vector3 Scale { get { return scale; } set { scale = value; needUpdate = true; } } public Matrix Matrix { get { if (needUpdate) { // Вычисляем итоговую матрицу // (Масштаб * Вращение * Перемещение) matrix = Matrix.CreateScale(scale) * Matrix.CreateRotationY(MathHelper.ToRadians(rotate.Y)) * Matrix.CreateRotationX(MathHelper.ToRadians(rotate.X)) * Matrix.CreateRotationZ(MathHelper.ToRadians(rotate.Z)) * Matrix.CreateTranslation(translate); needUpdate = false; } return matrix; } }
В классе Transformation преобразования перемещения, вращения и масштабирования хранятся в объектах XNA Vector3 с именами translate, rotate и scale соответственно, и вы можете устанавливать и получать их через свойства. Атрибут matrix хранит комбинацию преобразований перемещения, вращения и масштабирования в объекте XNA Matrix, и вы можете использовать его для применения этих преобразований к объекту. Вы можете устанавливать и получать атрибут matrix через свойство Matrix, и он будет заново вычисляться всякий раз, когда обновлены преобразования перемещения, вращения или масштабирования.
Вы используете методы CreateTranslate, CreateRotation и CreateScale класса Matrix XNA, чтобы сгенерировать матрицы, используемые для перемещения, вращения и масштабирования объекта. Обратите внимание, что матрица преобразования объекта вычисляется путем комбинирования матриц масштабирования, вращения и перемещения в указанном порядке. Поскольку произведение матриц некоммутативно, порядок, в котором вы комбинируете преобразования, очень важен. Правильный порядок преобразования объекта таков: сперва масштабирование, затем вращение, и в конце перемещение.
netlib.narod.ru | < Назад | Оглавление | Далее > |