Преобразования в трехмерном пространстве

 

Зная координаты вершин полигонов, из которых состоит объект, мы можем расположить его в пространстве. Теперь нужно разобраться с изменением положения объектов в пространстве. Существует несколько основных операций, которые могут использоваться для перемещения объектов в трехмерном пространстве. Это – перемещение (translation), вращение (rotation) и масштабирование (scale).

Результаты работы графической подсистемы трехмерной игры мы видим на плоском экране монитора – смоделированная компьютером трехмерная сцена проецируется на двумерную поверхность. При проецировании нужно выбрать точку, которая выполняет роль камеры, позволяющей видеть трехмерное пространство. В свою очередь, объекты в трехмерном пространстве могут перемещаться в соответствии с определенными правилами. Для управления всем этим используются несколько матриц. Это – мировая матрица (World Matrix), матрица вида (View Matrix) и матрица проекции (Projection Matrix).

Матрицу можно представить в виде таблицы, состоящей из m строк и n столбцов. В компьютерной графике применяются матрицы 4х4. Первых три столбца этой матрицы отвечают за модификацию координат X, Y, Z вершин объекта, участвующего в трансформации.

Мировая матрица позволяет задавать преобразования – перемещения, вращения и трансформации объектов.

Матрица вида позволяет управлять камерой.

Матрица проекции служит для настройки проекции трехмерной сцены на экран.

 

Предположим, имеется треугольник, заданный следующими вершинами (табл. 1.).

Таблица 1. Вершины треугольника до перемещения

Вершина X Y Z

1 20 10 5

2 15 20 10

3 25 30 10

 

При перемещении этого треугольника на 10 позиций по оси X мы должны прибавить по 10 к каждой из координат X его вершин. В результате получится матрица такого вида (табл. 2.).

Таблица 2. Вершины треугольника после перемещения

Вершина X Y Z

1 30 10 5

2 25 20 10

3 35 30 10

 

Того же эффекта можно достичь, умножив координаты каждой из вершин на мировую матрицу. Для этого координаты вершины представляют в виде матрицы, состоящей из одной строки и четырех столбцов. В первых трех столбцах содержатся координаты X, Y, Z, в четвертом – 1. Мировая матрица представлена в виде таблицы 4х4. Вот как выглядит операция умножения матриц (формула 1.):

 

Формула 1. Умножение матрицы вершины и мировой матрицы

При преобразовании каждая из вершин умножается на мировую матрицу.

Каждое из преобразований в пространстве требует особой настройки мировой матрицы. В формуле 2. приведен шаблон мировой матрицы, которая позволяет перемещать объекты в пространстве.

 

Формула 2. Мировая матрица для перемещения объекта

 

Здесь ΔX ,ΔY и ΔZ - это приращения координат X, Y и Z.

Мировая матрица для вращения объектов вокруг оси Х выглядит так (формула 3.).

 

Формула 3. Мировая матрица для вращения по оси Х

 

Здесь α - угол поворота в радианах

Мировая матрица для вращения объектов по оси Y выглядит так (формула 4.)

 

Формула 4. Мировая матрица для вращения по оси Y

 

Матрица для вращения объектов вокруг оси Z приведена в формуле 5.

 

Формула 5. Мировая матрица для вращения по оси Z

 

Формула 6. представляет матрицу, которая служит для трансформации объектов.

φx, φy ,φz - это коэффициенты масштабирования, которые применяются к вершинам. Они позволяют «сжимать» или «растягивать» объекты.

Другие типы матриц:

Матрица вида влияет на положение камеры – точки, из которой осуществляется просмотр трехмерной сцены.

Матрица проекции позволяет управлять проецированием сцены на экран.

Первый – это перспективная проекция (Perspective projection). В этой проекции объекты выглядят так же, как мы привыкли их видеть в реальном мире. Объекты, которые расположены дальше, кажутся меньше объектов, расположенных ближе.

Второй вид проекции – это ортогональная проекция. Здесь объекты проецируются на плоскость экрана без учета перспективы.

 

Освещение

 

Освещение объектов в играх исполняет ту же роль, которая отведена ему в реальном мире. Существует множество типов освещения.

Окружающий рассеянный свет (ambient light) - это свет, который освещает все объекты сцены с одинаковой интенсивностью. Источник рассеянного света не имеет местоположения.

Точечный источник света (point light) – это источник, который излучает свет во всех направлениях. Его можно сравнить со светом, исходящим от лампочки, не прикрытой абажуром.

Направленный источник света (directional light). Этот источник, в отличие от точечного, не имеет местоположения, однако имеет ориентацию

Зональный источник света (spot light) или прожектор имеет местоположение, ориентацию, а его световой поток ограничен в форме конуса.

Источники света могут иметь различную интенсивность, различный цвет, при освещении сцен можно использовать несколько различных источников. Все это делает освещение важнейшим элементом трехмерной графики.

 

Шейдеры

 

Шейдеры, или шейдерные программы – это программы, которые позволяют применять к моделям различные эффекты. Они пишутся на специальном языке программирования, как правило, не вручную, а с использованием соответствующего ПО. Шейдеры делятся на вершинные и пиксельные. Вершинные шейдеры позволяют применять различные эффекты к вершинам моделей, пиксельные шейдеры обрабатывают цвет каждого из пикселей модели перед выводом её на экран.

 

 

Текстуры

 

Текстуры – это растровые (двумерные) изображения, которые накладываются на трехмерные модели. Например, трехмерная модель автомобиля может представлять собой автомобиль, который как бы «вырезан» из твердого материала, а после наложения на эту модель соответствующей текстуры автомобиль приобретает цвет, создается иллюзия наличия у него мелких деталей оформления и т.д. Минимальная единица текстуры называется текселем. Чем больше пикселей приходится на один тексель, чем большьше разрешение текстуры – тем более качественной будет выглядеть модель после наложения на нее текстуры.