Partilhar via


Visores e recorte

Uma viewport é um retângulo bidimensional (2D) no qual uma cena 3D é projetada. No Direct3D, o retângulo existe como coordenadas dentro de uma superfície Direct3D que o sistema usa como um destino de renderização. A transformação de projeção converte vértices no sistema de coordenadas usado para a viewport. Uma viewport também é usada 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).

O tronco de visualização

Um tronco de visualização é o volume 3D em uma cena posicionada em relação à câmera da janela de visualização. A forma do volume afeta como os modelos são projetados do espaço da câmera para a tela. O tipo mais comum de projeção, uma projeção em perspectiva, é responsável por fazer com que objetos próximos à câmera pareçam maiores do que objetos à distância. Para visualização em perspectiva, o tronco de visualização pode ser visualizado como uma pirâmide, com a câmera posicionada na ponta, conforme mostrado na ilustração a seguir. Esta pirâmide é interceptada por um plano de recorte frontal e traseiro. O volume dentro da pirâmide entre os planos de recorte frontal e traseiro é o tronco de visualização. Os objetos são visíveis somente quando estão neste volume.

ilustração de um frustrum de visualização com um plano de recorte frontal e traseiro

Se você imaginar que está em um quarto escuro e olhando através de uma janela quadrada, você está visualizando um tronco de visualização. Nessa analogia, o plano de recorte próximo é a janela, e o plano de recorte traseiro é o que finalmente interrompe sua visão - o arranha-céu do outro lado da rua, as montanhas ao longe ou nada. Você pode ver tudo dentro da pirâmide truncada que começa na janela e termina com o que interrompe sua visão, e você não pode ver mais nada.

O tronco de visualização é definido por fov (campo de visão) e pelas distâncias dos planos de recorte frontal e traseiro, especificados em coordenadas z, conforme mostrado no diagrama a seguir.

diagrama do tronco de visualizaçã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 visualização. Este é o espaço em torno do qual você organiza os limites do seu tronco de visualização. Para obter informações sobre como essa variável D é usada para criar a matriz de projeção, consulte a transformação Projeção

Retângulo da janela de visualização

Um struct de viewport contém quatro membros (X, Y, Largura, Altura) que definem a área da superfície de destino de renderização na qual uma cena será renderizada. Esses valores correspondem ao retângulo de destino ou retângulo de visor, conforme mostrado no diagrama a seguir.

Diagrama do retângulo da janela de visualização

Os valores especificados para os membros X, Y, Largura e Altura são coordenadas de tela em relação ao canto superior esquerdo da superfície de destino de renderização. A estrutura define dois membros adicionais (MinZ e MaxZ) que indicam os intervalos de profundidade nos quais a cena será renderizada.

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 com mais frequência pelos aplicativos no passado. Você pode ajustar a taxa de proporção da viewport antes de recortar usando a transformação de projeção.

Observação MinZ e MaxZ indicam os intervalos de profundidade nos quais a cena será renderizada e não são usados para recorte. A maioria dos aplicativos definirá esses valores como 0,0 e 1,0, para permitir que o sistema renderize para todo o intervalo de valores de profundidade no buffer de profundidade. Em alguns casos, você pode obter efeitos especiais usando outras faixas de profundidade. Por exemplo, para renderizar um heads-up display em um jogo, você pode definir ambos os valores como 0,0 para forçar o sistema a renderizar objetos em uma cena em primeiro plano, ou você pode definir ambos como 1,0 para renderizar um objeto que deve estar sempre em segundo plano.

 

As dimensões usadas nos membros X, Y, Width, Height de um struct de viewport definem o local e as dimensões do visor na superfície de destino de renderização. Esses valores estão em coordenadas de tela, em relação ao canto superior esquerdo da superfície.

O Direct3D usa o local e as dimensões do visor para dimensionar os vértices para ajustar uma cena renderizada no local apropriado na superfície de destino. Internamente, o Direct3D insere esses valores na matriz a seguir que é aplicada a cada vértice.

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

Essa matriz dimensiona os vértices de acordo com as dimensões da viewport e a faixa de profundidade desejada e os converte para o local apropriado na superfície do destino de renderização. A matriz também inverte a coordenada y para refletir uma origem de tela no canto superior esquerdo com y aumentando para baixo. Depois que essa matriz é aplicada, os vértices ainda são homogêneos - ou seja, eles ainda existem como vértices [x,y,z,w] - e devem ser convertidos em coordenadas não homogêneas antes de serem enviados para o rasterizador.

Observação : os aplicativos normalmente definem MinZ e MaxZ como 0,0 e 1,0, respectivamente, para fazer com que o sistema seja renderizado em todo o intervalo de profundidade. No entanto, você pode usar outros valores para obter determinados efeitos. Por exemplo, você pode definir ambos os valores como 0,0 para forçar todos os objetos em primeiro plano ou definir ambos como 1,0 para renderizar todos os objetos em segundo plano.

 

Limpando uma viewport

Limpar a janela de visualização redefine o conteúdo do retângulo da janela de visualização na superfície de destino de renderização. Ele também pode limpar o retângulo nas superfícies de buffer de profundidade e estêncil.

Configurar a viewport para recorte

Os resultados da matriz de projeção determinam o volume de recorte no espaço de projeção como:

-wc< = xc< = wc

-wc< = yc< = wc

<0 = zc< = wc

Onde: x, y, z e w representam as coordenadas de vértice após a aplicação da transformação de projeção. Todos os vértices que têm um componente x, y ou z fora desses intervalos são recortados, se o recorte estiver ativado (o comportamento padrão).

Sistemas de coordenadas e geometria