Поделиться через


Преобразование проекции

Преобразование проекции управляет внутренними элементами камеры, например выбор объектива для камеры. Это самый сложный из трех типов преобразований.

Матрица проекции обычно является проекцией масштаба и перспективы. Преобразование проекции преобразует вид frustum в фигуру кубоида. Поскольку в ближайшем конце просмотра frustum меньше, чем дальнее конца, это имеет эффект расширения объектов, которые находятся рядом с камерой; Это то, как перспектива применяется к сцене.

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

иллюстрация матрицы проекции

Матрица просмотра преобразует камеру в источник путем перевода в направлении z по - D. Матрица перевода похожа на следующую иллюстрацию.

иллюстрация матрицы перевода

Умножение матрицы перевода на матрицу проекции (T*P) дает составную матрицу проекции, как показано на следующем рисунке.

иллюстрация составной матрицы проекции

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

Схема преобразования перспективы изменяет представление frustum в новое пространство координат

В преобразовании перспективы ограничения x-и y-направлений — 1 и 1. Ограничения z-направления — 0 для передней плоскости и 1 для задней плоскости.

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

иллюстрация матрицы для проекции перспективы

В этой матрице Zn — это z-значение близкого отрезка плоскости. Переменные w, h и Q имеют следующие значения. Обратите внимание, что fov w и fovkпредставляют горизонтальные и вертикальные поля представления в радианах.

уравнения значений переменной

Для приложения для определения коэффициентов масштабирования x и y можно использовать горизонтальные и вертикальные измерения окна просмотра (в пространстве камеры). По мере того как математика работает, следующие два уравнения для w и h используют измерения окна просмотра и эквивалентны предыдущим уравнениям.

уравнения значений переменных w и h

В этих формулах Zn представляет позицию близкого плоскости вырезки, а переменные Vw и Vh представляют ширину и высоту окна просмотра в пространстве камеры.

Независимо от формулы, которую вы решили использовать, обязательно установите Zn на максимально большое значение, так как z-значения очень близко к камере не сильно различаются. Это делает сравнение глубины с помощью 16-разрядных z-буферов несколько сложно.

Матрица проекции с поддержкой w

Direct3D может использовать w-компонент вершины, который был преобразован миром, представлением и матрицами проекции для выполнения вычислений на основе глубины в буфере глубины или эффекты тумана. Вычисления, такие как эти, требуют, чтобы матрица проекции нормализована w была эквивалентна мировому пространству z. Короче говоря, если матрица проекции включает коэффициент (3,4), который не равен 1, необходимо масштабировать все коэффициенты по обратному коэффициенту (3,4), чтобы сделать правильную матрицу. Если вы не предоставляете соответствующую матрицу, эффекты тумана и буферизация глубины не применяются правильно.

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

иллюстрации несоответствующей матрицы проекции и матрицы с туманом относительно глаз

В предыдущих матрицах предполагается, что все переменные являются ненулевой. Сведения о буферизации глубины на основе w см. в разделе "Буферы глубины".

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

Преобразования