Окна просмотра и обрезка

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

Просмотр frustum

Усеченная пирамида видимости — это 3D-объем в сцене, позиционируемый относительно камеры окна просмотра. Форма этого объема влияет на то, как модели проецируются из пространства камеры на экран. При использовании наиболее распространенного типа проекции — перспективной проекции — объекты, которые находятся ближе к камере, кажутся больше, чем объекты дальше от нее. В случае перспективной проекции усеченную пирамиду видимости можно визуализировать как пирамиду, на вершине которой находится камера, как показано на следующем рисунке. Эта пирамида пересекается передней и задней плоскостью кадрирования. Объем пирамиды между передней и задней плоскостями кадрирования — это и есть усеченная пирамида видимости. Объекты отображаются, только когда они находятся в пределах этого объема.

Иллюстрация усеченной пирамиды видимости с передней и задней плоскостью кадрирования

Если представить себе, что вы стоите в темной комнате и смотрите наружу через квадратное окно, то, что вы видите — это усеченная пирамида видимости. В этой аналогии ближняя плоскость кадрирования — это окно, а задняя плоскость кадрирования — это то, что в итоге перегораживает открывающийся перед вами вид: высотный дом через дорогу, горы вдалеке или вообще ничего. Вы видите все, что находится внутри усеченной пирамиды, которая начинается окном и заканчивается предметом, который перегораживает вид; больше вы не видите ничего.

Усеченная пирамида видимости определяется полем зрения и расстояниями до передней и задней плоскостей кадрирования, заданными в виде Z-координат, как показано на следующей схеме.

Схема усеченной пирамиды видимости

На этой схеме переменная D — это расстояние от камеры до начала координат пространства, которое было определено на последнем участке геометрического конвейера — при преобразовании для просмотра. Это пространство, вокруг которого располагаются пределы вашей усеченной пирамиды видимости. О том, как использовать эту переменную D для построения матрицы проекции, см. в разделе Преобразование проекции

Прямоугольник окна просмотра

Структура окна просмотра содержит четыре члена (X, Y, Width, Height), которые определяют область поверхности целевого объекта отрисовки, где будет отрисовываться сцена. Эти значения соответствуют целевому прямоугольнику, или прямоугольнику окна просмотра, как показано на следующей схеме.

Схема прямоугольника окна просмотра

Значения, задаваемые в качестве членов X, Y, Width, Height, — это экранные координаты относительно левого верхнего угла поверхности целевого объекта отрисовки. Структура определяет два дополнительных члена (MinZ и MaxZ); они указывают диапазоны глубин, в которых будет отрисовываться сцена.

Direct3D предполагает, что объем кадрирования окна просмотра находится в диапазоне от -1,0 до 1,0 по оси X и от 1,0 до -1,0 по оси Y. Эти значения в прошлом использовались большинством приложений. Пропорции окна просмотра можно откорректировать перед кадрированием с использованием преобразования проекции.

Примечание MinZ и MaxZ указывают диапазоны глубины, в которых будет отображаться сцена, и не используются для обрезки. Большинство приложений будут задавать эти значения равными 0,0 и 1,0, чтобы разрешить системе отрисовывать сцену во всем диапазоне значений глубины в буфере глубины. В некоторых случаях можно добиться особых эффектов, используя другие диапазоны глубин. Например, для отрисовки экранных элементов в игре вы можно задать оба значения равными 0,0, чтобы заставить систему отрисовывать объекты в сцене на переднем плане, или задать их оба равными 1,0 для отрисовки объекта, который всегда должен находиться на заднем плане.

 

Размеры, используемые в членах X, Y, Width, Height структуры окна просмотра, определяют местоположение и размеры окна просмотра на поверхности целевого объекта отрисовки. Эти значения задаются в экранных координатах относительно левого верхнего угла поверхности.

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

уравнение матрицы, применяемое к каждой вершине

Эта матрица масштабирует вершины в соответствии с размерами окна просмотра и желаемым диапазоном глубин, а также переносит их в соответствующее местоположение на поверхности целевого объекта отрисовки. Матрица также обращает Y-координату, чтобы отразить начало координат экрана в левом верхнем углу с осью Y, направленной вниз. После применения этой матрицы вершины по-прежнему однородны, то есть они по-прежнему существуют как вершины [x,y,z,w], и перед отправкой в средство растеризатора их необходимо преобразовать в неоднородные координаты.

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

 

Очистка окна просмотра

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

Настройка окна просмотра для обрезки

Результаты матрицы проекции определяют объем кадрирования в пространстве проекции следующим образом:

-wc<= xc<= wc

-wc<= yc<= wc

0 <= zc<= wc

где x, y, z и w представляют координаты вершин после применения преобразования проекции. Все вершины, у которых x-, y- или z-компонент находится вне этих диапазонов, отсекаются, если кадрирование включено (поведение по умолчанию).

Системы координат и геометрия