Спонсор: Microsoft
Опубликован: 10.04.2009 | Уровень: специалист | Доступ: платный
Лекция 5:

Трехмерная графика

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

$$
\begin{bmatrix}
  20&10&5&1
  \end{bmatrix}
*
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
10&0&0&1
\end{bmatrix}
=
\begin{bmatrix}
30&10&5&1
\end{bmatrix} ( 18.1)

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

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

$$
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
\DeltaX&\DeltaY&\DeltaZ&1
\end{bmatrix}
$$ ( 18.2)

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

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

$$
\begin{bmatrix}
1&0&0&0\\
0&\cos(\alpha)&\sin(\alpha)&0\\
0&-\sin(\alpha)&\cos(\alpha)&0\\
0&0&0&1
\end{bmatrix}
$$ ( 18.3)

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

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

$$
\begin{bmatrix}
\cos(\alpha)&0&-\sin(\alpha)&0\\
0&1&0&0\\
\sin(\alpha)&0&\cos(\alpha)&0\\
0&0&0&1
\end{bmatrix}
$$ ( 18.4)

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

$$
\begin{bmatrix}
\cos(\alpha)&\sin(\alpha)&0&0\\
-\sin(\alpha)&\cos(\alpha)&0&0\\
0&0&1&0\\
0&0&0&1
\end{bmatrix}
$$ ( 18.5)

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

$$
\begin{bmatrix}
\phi X&0&0&0\\
0&\phi X&0&0\\
0&0&\phi Z&0\\
0&0&0&1
\end{bmatrix}
$$ ( 18.6)

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

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

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

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

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

Освещение

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

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

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

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

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

Шейдеры

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

Текстуры

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

Объекты XNA для работы с 3D-графикой

В объектной модели XNA существует несколько объектов, которые интенсивно используются для работы с трехмерной графикой.

Класс Matrix позволяет создавать матрицы, которые используются для преобразований объектов в пространстве, для управления камерой и проекцией трехмерной сцены на экран. Этот класс, который, как это обычно бывает в NET Framework, является так же типом данных и содержит статические методы, используемые для создания матриц. Как правило, приходится, например, "вручную" модифицировать мировую матрицу для того, чтобы организовать поворот или перемещение модели – все необходимые операции можно выполнить с помощью статических методов класса Matrix, так же объекты класса Matrix имеют множество полезных свойств. Рассмотрим некоторые из них.

Свойства Mxy возвращают значения, которые располагаются в строке с индексом x и в столбце с индексом y, которые изменяются от 1 до 4. Например, свойство M11 возвращает значение, находящееся на пересечении первой строки и первого столбца матрицы, M23 – второй строки и третьего столбца, M44 – четвертой строки и четвертого столбца.

Метод CreateLookAt позволяет создать видовую матрицу (камеру).

Метод CreateOrthographic позволяет создать ортогональную проекционную матрицу.

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

Методы CreateRotationX, CreateRotationY, CreateRotationZ позволяют создавать матрицы поворота вокруг соответствующей оси.

Метод CreateScale предназначен для создания матрицы масштабирования (изменения размеров) объекта.

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

Метод CreateWorld создает мировую матрицу.

Класс Vector3 используется для хранения координат точек в пространстве, для задания векторов и для некоторых других задач, например – для задания параметров матриц.

Класс BasicEffect содержит множество элементов, важных при создании трехмерной сцены. Именно объект этого класса содержит описания матриц, описания источников света в игре и многие другие важные свойства и методы.

Свойство AmbientLightColor позволяет установить окружающее освещение рассеянным светом

Свойства DirectionalLight0, DirectionalLight1, DirectionalLight2 позволяет установить источники направленного цвета

Свойства FogColor, FogEnabled, FogEnd, FogStart позволяют управлять эффектом тумана

Свойство LightingEnabled позволяет включать освещение

Свойство PreferPerPixelLighting позволяют управлять эффектом попиксельного освещения – этот тип освещения доступен для графических адаптеров, поддерживающих Pixel Shader Model 2.0 (Модель пиксельных шейдеров 2.0.)

Свойство Projection позволяет управлять проекционной матрицей.

Свойство Texture предназначено для управления текстурой

Свойство TextureEnabled позволяет включать использование текстуры

Свойство View позволяет управлять матрицей вида (камерой)

Свойство World предназначено для управления мировой матрицей

Методы Begin и End позволяют указать начало и конец блока обработки эффекта.

Метод EnableDefaultLighting позволяет включить освещение по умолчанию.

MathHelper

Содержит полезные методы для проведения различных математических операций. Например, статический метод ToRadians позвлояет переводить значения из градусов в радианы.

При работе с трехмерной графикой используются и другие объекты XNA, с ними вы познакомитесь в дальнейших работах.

Alina Lasskaja
Alina Lasskaja

Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить.....

Дмитрий Кацман
Дмитрий Кацман
Израиль
Андрей Веденин
Андрей Веденин
Россия, Белгород