C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 57 - Перемещение, масштабирование и повороты в трехмерном пространстве / Справка по DirectX / Microsoft DirectX

Шаг 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 и нам ненужно ничего изобретать. Но это только часть возможных преобразований. Существует много вариаций и несколько совершенно новых типов - деформация и т.п.


| |
Автор Хавов Евгений Валерьевич.
[AD]