Все объекты в видеоиграх представлены точками, линиями и геометрическими фигурами. Потому мы должны всегда производить их разбиение на исходные состовляющие - точки. Только проделав это, мы можем их преобразовывать. Поскольку точки - это вершины объектов, то они могут рассматриваться вообще отдельно от объекта, но при этом представлять его в целом. Например, если мы хотим повернуть или переместить куб, то, прежде чем выполнять данное преобразование, нам нужно разбить объект на многоугольники, а затем на точки.
Просуммируем все вышесказанное:
Понимая это, мы должны сосредоточить свое внимание на способах преобразования точек.
Для перемещения точки (x, y, z) на расстояние (dx, dy, dz) необходимо выполнить следующие операции:
x = x + dx; y = y + dy; z = z + dz;
Если мы хотим использовать эту матрицу, то должны представить точку в виде четырех компонентов (x, y, z, 1). Матричное умножение будет выглядеть так:
где dx, dy и dz - это перемещения по осям координат, а x', y' и z' - координаты точки после перемещения.
Следующая операция трансформации, которую должны уметь выполнять, это масштабирование. Изменение размеров трехмерного объекта похоже на двухмерное масштабирование. Здесь показано масштабирование точки (x, y, z) с коэффициентом S:
x = x * S; y = y * S; z = z * S;
Все очень просто. Только кажется, что трехмерная графика сложна для понимания. Для описания преобразований с помощью матриц, мы опять должны представить точку в виде (x, y, z, 1):
Если Вы решите масштабировать каждый из компонентов по-разному, то Вам потребуются разные коэффициенты для каждого измерения:
Это приведет к неоднородному масштабированию.
Следующая матрица преобразований вращает точку (x, y, z) параллельно оси Х:
где r - угол вращения в радианах.
Матрица преобразования, вращающая точку параллельно оси Y:
где r - угол вращения в радианах.
Матрица преобразования, вращающая точку параллельно оси Z:
где r - угол вращения в радианах.
Подведем итог разговору о трансформациях трехмерных объектов. Все выше описанные трансформации реализованы в DirectX и нам ненужно ничего изобретать. Но это только часть возможных преобразований. Существует много вариаций и несколько совершенно новых типов - деформация и т.п.