| 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 | < Назад | Оглавление | Далее > |