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

Координатная система. Камеры и матрицы

Последнее обновление: 14.11.2015

Одним из ключевых моментов при работе с трехмерной графикой является координатная система. Если в двухмерной графике используется координатная система из двух осей X и Y, то в трехмерной системе к ним добавляется еще и ось Z. При этом трехмерные координатные системы бывают двух видов: левосторонняя и правосторонняя. Направление оси Z (на нас или от нас) определяет тип координатной системы:

Координатная система в MonoGame

В MonoGame применяется правосторонняя координатная система, то есть ось Х направлена вправо, ось Y - вверх, а ось Z - на нас.

Камера и матрицы

Большое значение при проектировании трехмерных систем имеет камера. От ее положения будет зависеть отображение трехмерной сцены. А положение и прочие свойства камеры определяются матрицами.

В MonoGame мы будем работать с тремя матрицами:

  • Матрица вида: определяет положение камеры в пространстве, ее направление и ориентацию.

  • Матрица проекции: преобразует трехмерные координаты сцены в двухмерные для отображения сцены на плоскости экрана.

  • Мировая матрица: используется для позиционирования объектов в трехмерной системе

Однако нам не придется самим создавать полностью матрицы и определять все операции между, так как в нашем распоряжении уже есть класс Matrix, который и выполняет основную работу.

Для создания матрицы вида применяется статический метод CreateLookAt класса Matrix. Он возвращает объект Matrix и принимает следующие параметры:

  • cameraPosition: позиция камеры в виде объекта Vector3

  • cameraTarget: координата точки, на которую направлена камера, опять же в виде объекта Vector3

  • cameraUpVector: вектор вертикальной ориентации камеры, также представляет объект Vector3

Таким образом, все три параметра принимают объект Vector3 - трехмерный вектор, который состоит из трех координат - X, Y, Z:

Vector3 vec = new Vector3(10, 20, 30);

Для создания матрицы проекции мы можем использовать другой статический метод класса Matrix - CreatePerspectiveFieldOfView(). Он также возвращает объект Matrix и принимает следующие параметры:

  • fieldOfView: угол обзора камеры в радианах

  • aspectRatio: аспектное отношение ширины экрана к высоте

  • nearPlaneDistance: расстояние от позиции камеры до ближней видимой точки

  • farPlaneDistance: расстояние до самой дальней видимой точки

Все четыре значения представляют объекты float. Создаваемая ими матрица в итоге формирует видимое пространство:

Матрица проекции в MonoGame

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

Для создания мировой матрицы используется метод Matrix.CreateWorld(), принимающий следующие параметры:

  • position: позиция объекта

  • forward: вектор направления вперед

  • up: вектор вертикальной ориентации, обычно имеет значение [0, 1, 0]

Все три параметра представляют объект Vector3.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850