Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить..... |
Трехмерная графика
Задачи лекции
- Ознакомиться с правосторонней системой координат.
- Ознакомиться с понятием точки, вершины, вектора, полигона в трехмерном пространстве
- Ознакомиться с применением мировой, видовой и проекционной матриц
- Ознакомиться с матричными преобразованиями в трехмерном пространстве.
- Ознакомиться с концепциями освещения объектов.
- Ознакомиться с наиболее важными свойствами и методами объектов XNA, используемых при работе с трехмерной графикой
Система координат
При работе с трехмерной графикой используется несколько видов систем координат. Для отображения двумерных объектов нам была нужна соответствующая система координат с двумя осями – горизонтальной осью X и вертикальной осью Y. Напомним, что экранная система координат для двумерной графики имеет начало (точку 0,0) в левом верхнем углу монитора, положительная часть оси X располагается справа от начала координат, положительная часть оси Y – снизу.
Для работы с трехмерными объектами нам понадобится еще одна ось – она называется ось Z. Существует несколько вариантов трехмерных систем координат, в частности, распространены так называемые правосторонняя и левосторонняя системы. Мы будем пользоваться правосторонней системой – она применяется в XNA Framework. Её схематичное изображение приведено на рис. 18.1.
Особенность этой системы координат заключается в том, что начало координат можно сопоставить с левым нижним углом монитора, положительная часть оси X находится справа от начала координат, положительная часть оси Y – сверху, а положительная часть оси Z – спереди. А это значит, что видимая часть оси Z – это её отрицательная часть. Эта часть оси находится как бы "в глубине монитора", в то время, как положительная часть находится "спереди монитора". На рис. 18.1. пунктиром изображена отрицательная часть оси Z.
В двумерной системе координат существует понятие точки – ее координаты задаются двумя значениями – X и Y. Точки существуют и в трехмерной системе координат – они задаются уже тремя значениями – X, Y, Z.
Точки используют для того, чтобы задавать координаты вершин многоугольников (полигонов), в частности – треугольников. Так, треугольник, изображенный на рис. 18.1., задан тремя точками – A, B, C.
Как правило, более сложные трехмерные объекты строятся именно из треугольников.
В трехмерной графике существует такое понятие, как грань (face). Это – плоский объект, который определяют несколько вершин. В нашем случае обычный треугольник – это именно грань. Из нескольких плоских граней можно собрать объемный объект.
Чем больше треугольников использовано при построении модели – тем более детализированной она получается. Точки, соответствующие вершинам треугольника, который можно изобразить в трехмерном пространстве, называются вершинами. Работая с трехмерной графикой в XNA вам часто придется встречать английский вариант слова вершина – vertex. Возможно, вам встретится множественное число слова вершина: "вершины" выглядит по-английски как "vertices". Иногда для обозначения вершин используют кальку с английского – вертекс.
Треугольник не случайно выбран в качестве базовой геометрической фигуры – во-первых – этот многоугольник всегда является выпуклым, во-вторых – невозможно расположить три точки таким образом, чтобы они не принадлежали одной плоскости. То есть, треугольник – это фигура, которая всегда является выпуклой и плоской, что позволяет с успехом использовать его в целях трехмерной графики.
Несколько граней, из которых состоит трехмерный объект, называются сетью (mesh). Сеть представляет собой набор треугольников.
Еще одно понятие, которое пригодится вам при работе с трехмерной графикой – это понятие вектора. Вектор (vector), так же как и точка, может быть определен тремя параметрами, однако он описывает не положение в пространстве, а направление и скорость движения. Вектор имеет начало и конец, для его полного определения нужно знать координаты точки начала и конца вектора, то есть, вместо трех значений координат нам понадобится уже шесть значений. Однако, если по умолчанию принять за начало вектора начало координат (точку 0,0,0) – тогда для его определения хватит и трех точек.
Например, вектор с координатами (1,0,0) означает: "направление – вправо, скорость – 1". Если отложить этот вектор от начала координат, то хорошо видно, что он направлен именно вправо (рис. 18.2.).
Направление вектора определяется положением второй точки относительно первой (в нашем случае – положение точки конца вектора, которой задается вектор относительно начала координат), а скорость – длиной вектора – то есть – разницей между начальной и конечной точкой. В нашем случае длина вектора совпадает с координатами его конца.
Существует особый вид векторов – нормали (normals). Нормали могут быть построены для граней и для вершин объекта. Нормали для граней перпендикулярны этим граням. Они используются при расчете цвета объекта.
Преобразования в трехмерном пространстве
Зная координаты вершин полигонов, из которых состоит объект, мы можем расположить его в пространстве. Теперь нужно разобраться с изменением положения объектов в пространстве. Существует несколько основных операций, которые могут использоваться для перемещения объектов в трехмерном пространстве. Это – перемещение (translation), вращение (rotation) и масштабирование (scale).
Результаты работы графической подсистемы трехмерной игры мы видим на плоском экране монитора – смоделированная компьютером трехмерная сцена проецируется на двумерную поверхность. При проецировании нужно выбрать точку, которая выполняет роль камеры, позволяющей видеть трехмерное пространство. В свою очередь, объекты в трехмерном пространстве могут перемещаться в соответствии с определенными правилами. Для управления всем этим используются несколько матриц. Это – мировая матрица (World Matrix), матрица вида (View Matrix) и матрица проекции (Projection Matrix).
Матрицу можно представить в виде таблицы, состоящей из m строк и n столбцов. В компьютерной графике применяются матрицы 4х4. Первых три столбца этой матрицы отвечают за модификацию координат X, Y, Z вершин объекта, участвующего в трансформации.
Мировая матрица позволяет задавать преобразования – перемещения, вращения и трансформации объектов.
Матрица вида позволяет управлять камерой.
Матрица проекции служит для настройки проекции трехмерной сцены на экран.
Предположим, имеется треугольник, заданный следующими вершинами (табл. 18.1.).
При перемещении этого треугольника на 10 позиций по оси X мы должны прибавить по 10 к каждой из координат X его вершин. В результате получится матрица такого вида (табл. 18.2.).