Цель лекции: Освоить теоретическую базу, необходимую для понимания функционирования механизмов визуализации трехмерной график в XNA
При работе с трехмерной графикой используется несколько видов систем координат. Для отображения двумерных объектов нам была нужна соответствующая
Для работы с трехмерными объектами нам понадобится еще одна ось – она называется ось Z. Существует несколько вариантов трехмерных систем координат, в частности, распространены так называемые правосторонняя и левосторонняя системы. Мы будем пользоваться правосторонней системой – она применяется в XNA Framework. Её схематичное изображение приведено на рис. 22.1.
(рис 22.1) Правосторонняя система координат
Особенность этой системы координат заключается в том, что начало координат можно сопоставить с левым нижним углом монитора, положительная часть оси X находится справа от начала координат, положительная часть оси Y – сверху, а положительная часть оси Z – спереди. А это значит, что видимая часть оси Z – это её отрицательная часть. Эта часть оси находится как бы "в глубине монитора", в то время, как положительная часть находится "спереди монитора". На рис. 22.1 пунктиром изображена отрицательная часть оси Z.
В двумерной системе координат существует понятие точки – ее координаты задаются двумя значениями – X и Y. Точки существуют и в трехмерной системе координат – они задаются уже тремя значениями – X, Y, Z.
Точки используют для того, чтобы задавать координаты вершин многоугольников (полигонов), в частности – треугольников. Так, треугольник, изображенный на рис. 22.1, задан тремя точками – A, B, C.
Как правило, более сложные трехмерные объекты строятся именно из треугольников.
В трехмерной графике существует такое понятие, как грань (
Чем больше треугольников использовано при построении модели – тем более детализированной она получается. Точки, соответствующие вершинам треугольника, который можно изобразить в трехмерном пространстве, называются вершинами. Работая с трехмерной графикой в XNA вам часто придется встречать английский вариант слова вершина –
Треугольник не случайно выбран в качестве базовой
Несколько граней, из которых состоит трехмерный объект, называются сетью (mesh). Сеть представляет собой набор треугольников.
Еще одно понятие, которое пригодится вам при работе с трехмерной графикой – это понятие вектора. Вектор (
Например, вектор с координатами (1,0,0) означает: "направление – вправо, скорость – 1". Если отложить этот вектор от начала координат, то хорошо видно, что он направлен именно вправо (рис. 22.2).
Направление вектора определяется положением второй точки относительно первой (в нашем случае – положение точки конца вектора, которой задается вектор относительно начала координат), а скорость – длиной вектора – то есть – разницей между начальной и конечной точкой. В нашем случае длина вектора совпадает с координатами его конца.
(рис 22.2) Вектор (1,0,0)
Существует особый вид векторов – нормали (normals). Нормали могут быть построены для граней и для вершин объекта. Нормали для граней перпендикулярны этим граням. Они используются при расчете цвета объекта.
Зная координаты вершин полигонов, из которых состоит объект, мы можем расположить его в пространстве. Теперь нужно разобраться с изменением положения объектов в пространстве. Существует несколько основных операций, которые могут использоваться для перемещения объектов в трехмерном пространстве. Это – перемещение (
Результаты работы
Матрицу можно представить в виде таблицы, состоящей из m строк и n столбцов. В компьютерной графике применяются матрицы 4х4. Первых три столбца этой матрицы отвечают за модификацию координат X, Y, Z вершин объекта, участвующего в трансформации.
Мировая матрица позволяет задавать преобразования – перемещения, вращения и трансформации объектов.
Матрица вида позволяет управлять камерой.
Предположим, имеется треугольник, заданный следующими вершинами (табл. 22.1).
| Вершина | X | Y | Z |
|---|---|---|---|
| 1 | 20 | 10 | 5 |
| 2 | 15 | 20 | 10 |
| 3 | 25 | 30 | 10 |
При перемещении этого треугольника на 10 позиций по оси X мы должны прибавить по 10 к каждой из координат X его вершин. В результате получится матрица такого вида (табл. 22.2).
| Вершина | X | Y | Z |
|---|---|---|---|
| 1 | 30 | 10 | 5 |
| 2 | 25 | 20 | 10 |
| 3 | 35 | 30 | 10 |
Того же эффекта можно достичь, умножив координаты каждой из вершин на мировую матрицу. Для этого координаты вершины представляют в виде матрицы, состоящей из одной строки и четырех столбцов. В первых трех столбцах содержатся координаты X, Y, Z, в четвертом – 1. Мировая матрица представлена в виде таблицы 4х4. Вот как выглядит операция
При преобразовании каждая из вершин умножается на мировую матрицу.
Каждое из преобразований в пространстве требует особой настройки мировой матрицы. В формуле 22.2. приведен шаблон мировой матрицы, которая позволяет перемещать объекты в пространстве.
Формула 22.2. Мировая матрица для перемещения объекта
$$ \left[ \begin{matrix} 1 00 0\\ 0 10 0\\ 0 01 0\\ \Delta X \Delta Y\Delta Z 1\\ \end{matrix}\right]$$Здесь$$\Delta X$$, $$\Delta Y$$ и $$\Delta Z$$ - это
Мировая матрица для вращения объектов вокруг оси Х выглядит так (формула 6.3.).
Формула 22.3. Мировая матрица для вращения по оси Х
$$\left[ \begin{matrix} 1 00 0\\ 0 cos (\alpha)sin (\alpha) 0\\ 0 -sin (\alpha)cos (\alpha) 0\\ 10 00 1\\ \end{matrix}\right]$$Здесь $$\alpha$$ - угол поворота в радианах
Мировая матрица для вращения объектов по оси Y выглядит так (формула 6.4.)
Формула 22.4. Мировая матрица для вращения по оси Y
$$ \left[ \begin{matrix} cos (\alpha) 0-sin (\alpha) 0\\ 0 1 0 0\\ sin (\alpha) 0cos (\alpha) 0\\ 0 00 1\\ \end{matrix}\right]$$Матрица для вращения объектов вокруг оси Z приведена в формуле 22.5.
Формула 22.5. Мировая матрица для вращения по оси Z
$$ \left[ \begin{matrix} cos (\alpha) sin (\alpha)0 0\\ -sin (\alpha) cos (\alpha) 0 0\\ 0 01 0\\ 0 00 1\\ \end{matrix}\right] $$Формула 22.6. представляет матрицу, которая служит для трансформации объектов.
$$ \left[ \begin{matrix} \varphi x 00 0\\ 0 \varphi y0 0\\ 0 0\varphi z 0\\ 10 00 1\\ \end{matrix}\right] $$Формула 22.5. Мировая матрица для вращения по оси Z
$$\varphi x$$, $$\varphi y$$, $$\varphi z$$ - это коэффициенты масштабирования, которые применяются к вершинам. Они позволяют "сжимать" или "растягивать" объекты.
Матрица вида влияет на положение камеры – точки, из которой осуществляется просмотр трехмерной сцены.
Первый – это перспективная
Второй вид
Освещение объектов в играх исполняет ту же роль, которая отведена ему в реальном мире. Существует множество типов освещения. Окружающий рассеянный свет (
Точечный источник света (
Направленный источник света (
Зональный источник света (
Источники света могут иметь различную интенсивность, различный цвет, при освещении сцен можно использовать несколько различных источников. Все это делает освещение важнейшим элементом трехмерной графики.
Шейдеры, или шейдерные программы – это программы, которые позволяют применять к моделям различные эффекты. Они пишутся на специальном языке программирования, как правило, не вручную, а с использованием соответствующего ПО. Шейдеры делятся на вершинные и пиксельные. Вершинные шейдеры позволяют применять различные эффекты к вершинам моделей, пиксельные шейдеры обрабатывают цвет каждого из пикселей модели перед выводом её на экран.
Текстуры – это растровые (двумерные) изображения, которые накладываются на трехмерные модели. Например, трехмерная модель автомобиля может представлять собой автомобиль, который как бы "вырезан" из твердого материала, а после наложения на эту модель соответствующей текстуры автомобиль приобретает цвет, создается иллюзия наличия у него мелких деталей оформления и т.д. Минимальная единица текстуры называется текселем. Чем больше пикселей приходится на один тексель, чем большьше разрешение текстуры – тем более качественной будет выглядеть модель после наложения на нее текстуры.
В
Класс позволяет создавать матрицы, которые используются для преобразований объектов в пространстве, для управления камерой и проекцией трехмерной сцены на экран. Этот класс, который, как это обычно бывает в NET Framework, является так же типом данных и содержит статические методы, используемые для создания матриц. Как правило, приходится, например, "вручную" модифицировать мировую матрицу для того, чтобы организовать поворот или перемещение модели – все необходимые операции можно выполнить с помощью статических методов класса , так же объекты класса имеют множество полезных свойств. Рассмотрим некоторые из них.
Свойства Mxy возвращают значения, которые располагаются в строке с индексом x и в столбце с индексом y, которые изменяются от 1 до 4. Например, свойство M11 возвращает значение, находящееся на пересечении первой строки и первого столбца матрицы, M23 – второй строки и третьего столбца, M44 – четвертой строки и четвертого столбца.
Метод CreateLookAt позволяет создать видовую матрицу (камеру).
Метод CreateOrthographic позволяет создать ортогональную проекционную матрицу.
Метод CreatePerspective позволяет создать перспективную проекционную матрицу.
Методы CreateRotationX, CreateRotationY, CreateRotationZ позволяют создавать матрицы поворота вокруг соответствующей оси.
Метод CreateScale предназначен для создания матрицы масштабирования (изменения размеров) объекта.
Метод CreateTranslation позволяет создать матрицу перемещения объекта.
Метод CreateWorld создает мировую матрицу.
Класс Vector3 используется для хранения координат точек в пространстве, для задания векторов и для некоторых других задач, например – для задания параметров матриц.
Класс BasicEffect содержит множество элементов, важных при создании трехмерной сцены. Именно объект этого класса содержит описания матриц, описания источников света в игре и многие другие важные свойства и методы.
Помимо класса BasicEffect для вывода трехмерных изображений с различными эффектами можно пользоваться классами AlphaTestEffect, DualTextureEffect, EnvironmentMapEffect, SkinnedEffect и другими объектами, описанными в пространстве имен Microsoft.Xna.Framework.Graphics.
Класс MathHelper содержит полезные методы для проведения различных математических операций. Например, статический метод ToRadians позвлояет переводить значения из градусов в радианы.
При работе с трехмерной графикой используются и другие объекты XNA, с ними вы познакомитесь в дальнейших работах.
В этой лекции мы рассмотрели теоретические основы, касающиеся визуализации трехмерных объектов в XNA, систему координат, основные понятия трехмерной графики, сделали обзор объектов XNA, используемых для работы с трехмерной графикой.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.