Шаг 57 - Перемещение, масштабирование и повороты в трехмерном пространстве

Все объекты в видеоиграх представлены точками, линиями и геометрическими фигурами. Потому мы должны всегда производить их разбиение на исходные состовляющие - точки. Только проделав это, мы можем их преобразовывать. Поскольку точки - это вершины объектов, то они могут рассматриваться вообще отдельно от объекта, но при этом представлять его в целом. Например, если мы хотим повернуть или переместить куб, то, прежде чем выполнять данное преобразование, нам нужно разбить объект на многоугольники, а затем на точки.

Просуммируем все вышесказанное:

Понимая это, мы должны сосредоточить свое внимание на способах преобразования точек.

Перемещение трехмерного объекта

Для перемещения точки (x, y, z) на расстояние (dx, dy, dz) необходимо выполнить следующие операции:

x = x + dx;
y = y + dy;
z = z + dz;

Если мы хотим использовать эту матрицу, то должны представить точку в виде четырех компонентов (x, y, z, 1). Матричное умножение будет выглядеть так:

57_1.gif (1056 b)

где dx, dy и dz - это перемещения по осям координат, а x', y' и z' - координаты точки после перемещения.

Масштабирование трехмерного объекта

Следующая операция трансформации, которую должны уметь выполнять, это масштабирование. Изменение размеров трехмерного объекта похоже на двухмерное масштабирование. Здесь показано масштабирование точки (x, y, z) с коэффициентом S:

x = x * S;
y = y * S;
z = z * S;

Все очень просто. Только кажется, что трехмерная графика сложна для понимания. Для описания преобразований с помощью матриц, мы опять должны представить точку в виде (x, y, z, 1):

57_2.gif (993 b)

Если Вы решите масштабировать каждый из компонентов по-разному, то Вам потребуются разные коэффициенты для каждого измерения:

57_3.gif (1076 b)

Это приведет к неоднородному масштабированию.

Вращение трехмерного объекта

Вращение, параллельное оси Х

Следующая матрица преобразований вращает точку (x, y, z) параллельно оси Х:

57_4.gif (1251 b)

где r - угол вращения в радианах.

Вращение, параллельное оси Y

Матрица преобразования, вращающая точку параллельно оси Y:

57_5.gif (1264 b)

где r - угол вращения в радианах.

Вращение, параллельное оси Z

Матрица преобразования, вращающая точку параллельно оси Z:

57_6.gif (1293 b)

где r - угол вращения в радианах.

Последнее слово о трехмерных трансформациях

Подведем итог разговору о трансформациях трехмерных объектов. Все выше описанные трансформации реализованы в DirectX и нам ненужно ничего изобретать. Но это только часть возможных преобразований. Существует много вариаций и несколько совершенно новых типов - деформация и т.п.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 28.08.2002