Координатные пространства

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

В DirectX используется несколько координатных пространств.

Мировое координатное пространство (World space)

В мировом координатном пространстве описываются все графические объекты. Именно в этом пространстве можно "увидеть" весь виртуальный мир. Ещё это пространство называют глобальным или универсальным.

Почему нельзя ограничиться только одним пространством - мировым? Дело в том, что использование нескольких пространств сильно упрощают жизнь.

В солнечной системе для удобства расчёта орбит планет используется гелиоцентрическая система координат (центр - Солнце). Но траекторию движения Луны вокруг Земли гораздо проще представить не в гелиоцентрической, а в геоцентрической (центр - Земля) системе координат. Здесь мы видим пример использования двух систем координат - мировой и объектной. То же самое и в компьютерных играх.

Тут стоит помнить, что местоположение - оно относительно. Местоположение объекта можно описать в разных координатных пространствах: траекторию Луны можно показать и в геоцентрической и в гелиоцентрической системе, но в первой это сделать проще.

Фото
Рассмотрим картинку, на которой изображено мировое координатное пространство. В пространстве расположен один объект - треугольник, и камера, которая направлена в сторону треугольника. И у камеры и у треугольника свои координатные пространства.

На второй картинке эта же сцена, только вид сверху. Здесь треугольник представлен в виде чёрточки. Все последующие картинки будут использовать или вид сбоку (оси x,y) или вид сверху (оси x,z).

Объектное координатное пространство (object space)

Именно в объектном координатном пространстве происходит построение модели (объекта).

Начало объектного пространство нужно располагать так, чтобы было удобней создавать объект. Иногда начало объектного пространства совпадает с центром масс модели.

На картинке можно видеть пространство треугольника описываемое осями x1, y1.
Фото

Если объект сложный, то вводятся дополнительные пространства - для упрощения анимации. Но нам до этого ещё далеко.

Инерционное координатное пространство (inertial space)

Мы введём ещё одно дополнительное координатное пространство - инерционное. Оно не используется в реальности, но позволяет упростить восприятие того, как взаимодействуют координатные пространства. Посмотрим на картинку:
Фото

Здесь представлены: объектное (x1,y1) и инерционное (x2,y2) пространства.

Направление осей инерционного пространства совпадает с направлением осей мирового пространства, а начало координат инерционного пространства совпадает с началом координат объектного пространства.

Чтобы "попасть" из объектного пространства в инерционного, нужно вращение. А из инерционного пространства очень легко попасть в мировое. Для этого используется перемещение. Инерционное пространство позволяет отделить эти две операции (вращение и перемещение).

Координатное пространство камеры

Фото
Камера - это представление пользователя в виртуальном мире. Именно через камеру игрок видит маленькую часть мирового пространства.

У камеры есть направление - в какую сторону смотрит пользователь и поля (сектора) обзора: по вертикали и по горизонтали.

Направление камеры (взгляд игрока) всегда совпадает с положительным направлением оси z в координатном пространстве камеры.

Определение координатных пространств

Мы выяснили какие пространства существуют в DirectX: мировое, объектное (у каждого объекта своё) и пространство камеры. Теперь нужно выяснить каким образом эти пространства взаимодействуют.

У каждого пространства есть оси и начало координат - точка пересечения осей (обозначается как точка О). Начало координат - это местоположение координатного пространства. Например: начало координат пространства камеры - это местоположение (координаты) этого пространства в мировом пространстве. Оси задают ориентацию пространства.

Преобразования координатных пространств

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

Разберём ситуацию, когда объектные координаты совпадают с инерционными. Допустим у нас есть треугольник в объектном пространстве с координатами (0,0)(1,1)(1,0). Координаты этого пространства в мире - (23, 12). Чтобы преобразовать точки треугольника в мировые координаты достаточно координаты каждой точки сложить с координатами объектного пространства: (23,12)(24,13)(24,12) - вот так выглядит треугольник в мировых координатах. Просто, правда?

Чтобы преобразовать координаты какой-то точки из мировых в объектные, нужно из координат этой точки вычесть координаты объектного пространства.

Если объектные координаты не совпадают с инерционными, то сначала нужно произвести вращение, всё остальное без изенений.

Важное замечание: при преобразованиях координатных пространств, координаты объектов не перемещаются!!! Мы просто выражаем местоположение объектов в разных координатных пространствах.