Visores e recorteViewports and clipping

O visor é um retângulo (2D) bidimensional no qual uma cena 3D é projetada.A viewport is a two-dimensional (2D) rectangle into which a 3D scene is projected. No Direct3D, o retângulo existe como coordenadas dentro de uma superfície do Direct3D que o sistema usa como um destino de renderização.In Direct3D, the rectangle exists as coordinates within a Direct3D surface that the system uses as a rendering target. A transformação da projeção converte os vértices no sistema de coordenadas usado para o visor.The projection transformation converts vertices into the coordinate system used for the viewport. Um visor também é usado para especificar o intervalo de valores de profundidade em uma superfície de destino de renderização na qual uma cena será renderizada (geralmente 0.0 a 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).

A exibição FrustumThe Viewing Frustum

Um tronco de exibição é o volume 3D em uma cena posicionado com relação à câmera do visor.A viewing frustum is 3D volume in a scene positioned relative to the viewport's camera. A forma do volume afeta como os modelos são projetados do espaço da câmera na tela.The shape of the volume affects how models are projected from camera space onto the screen. O tipo mais comum de projeção, uma projeção de perspectiva, é responsável por fazer com que os objetos próximos da câmera pareçam maiores que os objetos distantes.The most common type of projection, a perspective projection, is responsible for making objects near the camera appear bigger than objects in the distance. Para a exibição de perspectiva, o tronco de exibição pode ser visualizado como uma pirâmide, com a câmera posicionada na ponta conforme mostrado na ilustração a seguir.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. Esta pirâmide é intersectada por um plano de recorte traseiro e frontal.This pyramid is intersected by a front and back clipping plane. O volume na pirâmide entre aos planos de recorte dianteiro e traseiro é o tronco de exibição.The volume within the pyramid between the front and back clipping planes is the viewing frustum. Os objetos ficam visíveis somente quando estão nesse volume.Objects are visible only when they are in this volume.

ilustração de um tronco de exibição com um plano de recorte traseiro e frontal

Se você imaginar que está parado em uma sala escura e olhando por uma janela quadrada, estará visualizando um tronco de exibição.If you imagine that you are standing in a dark room and looking through a square window, you are visualizing a viewing frustum. Nessa analogia, o plano de recorte próximo é a janela, e o plano de recorte de fundo é tudo o que finalmente interrompe sua visão – os arranha-céus do outro lado da rua, as montanhas distantes, ou nada.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. Você pode ver tudo dentro da pirâmide truncada que começa na janela e termina com o que quer que interrompa sua visão, impedindo sua visão.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.

O tronco de exibição é definido por fov (campo de visão) e por distâncias dos planos de recorte traseiro e frontal, especificados em coordenadas de z, conforme mostrado no diagrama a seguir.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.

diagrama do tronco de exibição

Neste diagrama, a variável D é a distância da câmera até a origem do espaço que foi definido na última parte do pipeline de geometria - a transformação de exibição.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. Este é o espaço em torno do qual você organiza os limites de seu tronco de exibição.This is the space around which you arrange the limits of your viewing frustum. Para obter informações sobre como essa variável D é usada para criar a matriz de projeção, consulte a Transformação de projeçãoFor information about how this D variable is used to build the projection matrix, see the Projection transform

Retângulo do visorViewport Rectangle

Uma estrutura de visor contém quatro membros (X, Y, largura, altura) que definem a área da superfície do destino de renderização na qual uma cena será renderizada.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. Esses valores correspondem ao retângulo de destino ou retângulo do visor, conforme mostrado no diagrama a seguir.These values correspond to the destination rectangle, or viewport rectangle, as shown in the following diagram.

diagrama do retângulo do visor

Os valores que você especificar para os membros X, Y, largura, altura são coordenadas de tela relativas ao canto superior esquerdo da superfície do destino de renderização.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. A estrutura define dois membros adicionais (MinZ e MaxZ) que indicam os intervalos de profundidade nos quais a cena será renderizada.The structure defines two additional members (MinZ and MaxZ) that indicate the depth-ranges into which the scene will be rendered.

O Direct3D pressupõe que o volume de recorte do visor varia de -1,0 a 1,0 em X e de 1,0 a -1,0 em Y. Essas eram as configurações usadas mais frequentemente por aplicativos no passado.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. Você pode ajustar a taxa de proporção do visor antes de recortar usando a transformação da projeção.You can adjust the viewport aspect ratio before clipping using the projection transform.

Observação    MinZ e MaxZ indicam os intervalos de profundidade na qual a cena será renderizada e não são usados para recorte.Note   MinZ and MaxZ indicate the depth-ranges into which the scene will be rendered and are not used for clipping. A maioria dos aplicativos irá definir esses valores para 0,0 e 1,0 para permitir que o sistema renderize todo o intervalo de valores de profundidade no buffer de profundidade.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. Em alguns casos, você pode conseguir efeitos especiais usando outros intervalos de profundidade.In some cases, you can achieve special effects by using other depth ranges. Por exemplo, para renderizar um painel transparente em um jogo, você pode definir os dois valores como 0,0 para forçar o sistema a renderizar objetos em uma cena em primeiro plano, ou você pode defini-los como 1,0 para renderizar um objeto que sempre deve estar em segundo plano.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.

 

A dimensão usadas nos membros X, Y, largura e altura de uma estrutura de visor definem o local e as dimensões do visor na superfície do destino de renderização.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. Esses valores são dados em coordenadas de tela, relativas ao canto superior esquerdo da superfície.These values are in screen coordinates, relative to the upper-left corner of the surface.

O Direct3D usa a localização do visor e as dimensões para dimensionar os vértices para inserir uma cena renderizada no local apropriado na superfície de destino.Direct3D uses the viewport location and dimensions to scale the vertices to fit a rendered scene into the appropriate location on the target surface. Internamente, o Direct3D insere esses valores na matriz a seguir, que é aplicada a cada vértice.Internally, Direct3D inserts these values into the following matrix that is applied to each vertex.

equação da matriz que é aplicada a cada vértice

Essa matriz dimensiona os vértices de acordo com a dimensão do visor e o intervalo de profundidade desejado, e os move para o local apropriado na superfície do destino de renderização.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. A matriz também gira a coordenada y para refletir uma origem de tela no canto superior esquerdo com y aumentando para baixo.The matrix also flips the y-coordinate to reflect a screen origin at the top-left corner with y increasing downward. Depois que essa matriz é aplicada, vértices são ainda homogêneos – ou seja, eles ainda existem como [x, y, z, w] vértices - e eles devem ser convertidos em coordenadas não homogêneo antes de serem enviados para o rasterizador de.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.

Observação    aplicativos normalmente definido MinZ e MaxZ como 0,0 e 1,0, respectivamente, para fazer com que o sistema processar para o intervalo inteiro de profundidade.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. No entanto, você pode usar outros valores para alcançar determinados efeitos.However, you can use other values to achieve certain affects. Por exemplo, você pode definir os dois valores como 0,0 para forçar todos os objetos no primeiro plano ou definir ambos como 1,0 para renderizar todos os objetos em segundo plano.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.

 

Limpar um visorClearing a Viewport

Limpar o visor redefine o conteúdo do retângulo do visor na superfície do destino de renderização.Clearing the viewport resets the contents of the viewport rectangle on the render-target surface. Ele também pode limpar o retângulo nas superfícies de buffer de estêncil e de profundidade.It can also clear the rectangle in the depth and stencil buffer surfaces.

Configurar o visor para recorteSet Up the Viewport for Clipping

Os resultados da matriz de projeção determinam o volume de recorte no espaço de projeção: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

Onde: x, y, z e w representam as coordenadas de vértice depois que a transformação da projeção é aplicada.Where: x, y, z, and w represent the vertex coordinates after the projection transformation is applied. Qualquer vértice que tiver um componente x, y ou z fora desses intervalos será recortado, se o recorte estiver habilitado (comportamento padrão).Any vertices that have an x-, y-, or z-component outside these ranges are clipped, if clipping is enabled (the default behavior).

Tópicos relacionadosRelated topics

Sistemas de coordenadas e geometriaCoordinate systems and geometry