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


Просмотр портов и вырезки

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

Просмотр Frustum

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

иллюстрация просмотра frustrum с планом отрезки передней и задней части

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

Вид frustum определяется fov (полем зрения) и расстоянием переднего и заднего вырезки плоскостей, указанными в z-координатах, как показано на следующей схеме.

схема просмотра frustum

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

Видпорт Прямоугольник

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

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

Значения, заданные для элементов 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, чтобы отразить источник экрана в левом верхнем углу с увеличением вниз. После применения этой матрицы вершины по-прежнему однородные - то есть они по-прежнему существуют как вершины [x,y,z,w], и они должны быть преобразованы в неоднородные координаты перед отправкой в растризатор.

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

 

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

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

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

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

-wc<= xc<= wc

-wc= yc<<= w c

0 <= zc<= wc

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

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