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

Окно просмотра — это двухмерный прямоугольник, в который проецируется трехмерная сцена.A viewport is a two-dimensional (2D) rectangle into which a 3D scene is projected. В Direct3D этот прямоугольник существует как координаты внутри поверхности Direct3D, которую система использует как целевой объект отрисовки.In Direct3D, the rectangle exists as coordinates within a Direct3D surface that the system uses as a rendering target. Преобразование проекции преобразует вершины в систему координат, используемую для окна просмотра.The projection transformation converts vertices into the coordinate system used for the viewport. Окно просмотра также используется, чтобы указать диапазон значений глубины на целевой поверхности отрисовки, где будет отрисовываться сцена (как правило, от 0,0 до 1,0).A viewport is also used to specify the range of depth values on a render-target surface into which a scene will be rendered (usually 0.0 to 1.0).

Усеченной пирамиды обзораThe Viewing Frustum

Усеченная пирамида видимости — это 3D-объем в сцене, позиционируемый относительно камеры окна просмотра.A viewing frustum is 3D volume in a scene positioned relative to the viewport's camera. Форма этого объема влияет на то, как модели проецируются из пространства камеры на экран.The shape of the volume affects how models are projected from camera space onto the screen. При использовании наиболее распространенного типа проекции — перспективной проекции — объекты, которые находятся ближе к камере, кажутся больше, чем объекты дальше от нее.The most common type of projection, a perspective projection, is responsible for making objects near the camera appear bigger than objects in the distance. В случае перспективной проекции усеченную пирамиду видимости можно визуализировать как пирамиду, на вершине которой находится камера, как показано на следующем рисунке.For perspective viewing, the viewing frustum can be visualized as a pyramid, with the camera positioned at the tip as shown in the following illustration. Эта пирамида пересекается передней и задней плоскостью кадрирования.This pyramid is intersected by a front and back clipping plane. Объем пирамиды между передней и задней плоскостями кадрирования — это и есть усеченная пирамида видимости.The volume within the pyramid between the front and back clipping planes is the viewing frustum. Объекты отображаются, только когда они находятся в пределах этого объема.Objects are visible only when they are in this volume.

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

Если представить себе, что вы стоите в темной комнате и смотрите наружу через квадратное окно, то, что вы видите — это усеченная пирамида видимости.If you imagine that you are standing in a dark room and looking through a square window, you are visualizing a viewing frustum. В этой аналогии ближняя плоскость кадрирования — это окно, а задняя плоскость кадрирования — это то, что в итоге перегораживает открывающийся перед вами вид: высотный дом через дорогу, горы вдалеке или вообще ничего.In this analogy, the near clipping plane is the window, and the back clipping plane is whatever finally interrupts your view - the skyscraper across the street, the mountains in the distance, or nothing at all. Вы видите все, что находится внутри усеченной пирамиды, которая начинается окном и заканчивается предметом, который перегораживает вид; больше вы не видите ничего.You can see everything inside the truncated pyramid that starts at the window and ends with whatever interrupts your view, and you can see nothing else.

Усеченная пирамида видимости определяется полем зрения и расстояниями до передней и задней плоскостей кадрирования, заданными в виде Z-координат, как показано на следующей схеме.The viewing frustum is defined by fov (field of view) and by the distances of the front and back clipping planes, specified in z-coordinates, as shown in the following diagram.

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

На этой схеме переменная D — это расстояние от камеры до начала координат пространства, которое было определено на последнем участке геометрического конвейера — при преобразовании для просмотра.In this diagram, the variable D is the distance from the camera to the origin of the space that was defined in the last part of the geometry pipeline - the viewing transformation. Это пространство, вокруг которого располагаются пределы вашей усеченной пирамиды видимости.This is the space around which you arrange the limits of your viewing frustum. О том, как использовать эту переменную D для построения матрицы проекции, см. в разделе Преобразование проекцииFor information about how this D variable is used to build the projection matrix, see the Projection transform

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

Структура окна просмотра содержит четыре члена (X, Y, Width, Height), которые определяют область поверхности целевого объекта отрисовки, где будет отрисовываться сцена.A viewport struct contains four members (X, Y, Width, Height) that define the area of the render-target surface into which a scene will be rendered. Эти значения соответствуют целевому прямоугольнику, или прямоугольнику окна просмотра, как показано на следующей схеме.These values correspond to the destination rectangle, or viewport rectangle, as shown in the following diagram.

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

Значения, задаваемые в качестве членов X, Y, Width, Height, — это экранные координаты относительно левого верхнего угла поверхности целевого объекта отрисовки.The values you specify for the X, Y, Width, Height members are screen coordinates relative to the upper-left corner of the render-target surface. Структура определяет два дополнительных члена (MinZ и MaxZ); они указывают диапазоны глубин, в которых будет отрисовываться сцена.The structure defines two additional members (MinZ and MaxZ) that indicate the depth-ranges into which the scene will be rendered.

Direct3D предполагает, что объем кадрирования окна просмотра находится в диапазоне от -1,0 до 1,0 по оси X и от 1,0 до -1,0 по оси Y. Эти значения в прошлом использовались большинством приложений.Direct3D assumes that the viewport clipping volume ranges from -1.0 to 1.0 in X, and from 1.0 to -1.0 in Y. These were the settings used most often by applications in the past. Пропорции окна просмотра можно откорректировать перед кадрированием с использованием преобразования проекции.You can adjust the viewport aspect ratio before clipping using the projection transform.

Примечание    MinZ MaxZ указать глубину диапазонов, в которые будут передаваться сцены и не используются для обрезки.Note   MinZ and MaxZ indicate the depth-ranges into which the scene will be rendered and are not used for clipping. Большинство приложений будут задавать эти значения равными 0,0 и 1,0, чтобы разрешить системе отрисовывать сцену во всем диапазоне значений глубины в буфере глубины.Most applications will set these values to 0.0 and 1.0, to enable the system to render to the entire range of depth values in the depth buffer. В некоторых случаях можно добиться особых эффектов, используя другие диапазоны глубин.In some cases, you can achieve special effects by using other depth ranges. Например, для отрисовки экранных элементов в игре вы можно задать оба значения равными 0,0, чтобы заставить систему отрисовывать объекты в сцене на переднем плане, или задать их оба равными 1,0 для отрисовки объекта, который всегда должен находиться на заднем плане.For instance, to render a heads-up display in a game, you can set both values to 0.0 to force the system to render objects in a scene in the foreground, or you might set them both to 1.0 to render an object that should always be in the background.

 

Размеры, используемые в членах X, Y, Width, Height структуры окна просмотра, определяют местоположение и размеры окна просмотра на поверхности целевого объекта отрисовки.The dimensions used in the X, Y, Width, Height members of a viewport struct define the location and dimensions of the viewport on the render-target surface. Эти значения задаются в экранных координатах относительно левого верхнего угла поверхности.These values are in screen coordinates, relative to the upper-left corner of the surface.

Direct3D использует местоположение и размеры окна просмотра для масштабирования вершин так, чтобы отрисованная сцена поместилась в соответствующее место на поверхности целевого объекта.Direct3D uses the viewport location and dimensions to scale the vertices to fit a rendered scene into the appropriate location on the target surface. Внутренне Direct3D вставляет эти значения в следующую матрицу, которая применяется к каждой вершине.Internally, Direct3D inserts these values into the following matrix that is applied to each vertex.

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

Эта матрица масштабирует вершины в соответствии с размерами окна просмотра и желаемым диапазоном глубин, а также переносит их в соответствующее местоположение на поверхности целевого объекта отрисовки.This matrix scales vertices according to the viewport dimensions and desired depth range and translates them to the appropriate location on the render-target surface. Матрица также обращает Y-координату, чтобы отразить начало координат экрана в левом верхнем углу с осью Y, направленной вниз.The matrix also flips the y-coordinate to reflect a screen origin at the top-left corner with y increasing downward. После применения этой матрицы, вершины важны по-прежнему однородных — то есть они по-прежнему существуют в виде [x, y, z, w] вершин — и они должны быть преобразованы в отличных от однородном координаты перед отправкой в средство программной прорисовки.After this matrix is applied, vertices are still homogeneous - that is, they still exist as [x,y,z,w] vertices - and they must be converted to non-homogeneous coordinates before being sent to the rasterizer.

Примечание    приложений обычно устанавливают MinZ и MaxZ от 0,0 до 1,0, соответственно, чтобы привести в системе должны быть отображены диапазон всей глубины.Note   Applications typically set MinZ and MaxZ to 0.0 and 1.0 respectively to cause the system to render to the entire depth range. Однако можно использовать другие значения для достижения определенных эффектов.However, you can use other values to achieve certain affects. Например, можно задать оба значения равными 0,0, чтобы все объекты отрисовывались на переднем плане, или равными 1,0, чтобы все объекты отрисовывались на заднем плане.For example, you might set both values to 0.0 to force all objects into the foreground, or set both to 1.0 to render all objects into the background.

 

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

При очистке окна просмотра содержимое прямоугольника окна просмотра на поверхности целевого объекта отрисовки сбрасывается.Clearing the viewport resets the contents of the viewport rectangle on the render-target surface. Также при этом может очищаться прямоугольник в буфере глубины и буфере трафарета.It can also clear the rectangle in the depth and stencil buffer surfaces.

Настройка окна просмотра для обрезкиSet Up the Viewport for Clipping

Результаты матрицы проекции определяют объем кадрирования в пространстве проекции следующим образом:The results of the projection matrix determine the clipping volume in projection space as:

-wc<= xc<= wc-wc<= xc<= wc

-wc<= yc<= wc-wc<= yc<= wc

0 <= zc<= wc0 <= zc<= wc

где x, y, z и w представляют координаты вершин после применения преобразования проекции.Where: x, y, z, and w represent the vertex coordinates after the projection transformation is applied. Все вершины, у которых x-, y- или z-компонент находится вне этих диапазонов, отсекаются, если кадрирование включено (поведение по умолчанию).Any vertices that have an x-, y-, or z-component outside these ranges are clipped, if clipping is enabled (the default behavior).

Связанные разделыRelated topics

Системы координат и геометрияCoordinate systems and geometry