Camera vs Viewport

23

Não tenho uma compreensão clara do que é exatamente a diferença entre as coordenadas da câmera e as coordenadas da janela de visualização. Alguém pode esclarecer?

Code Vader
fonte

Respostas:

40

Câmera é como uma câmera com a qual o filme do Batman é filmado. Ele existe em um mundo virtual e pode ser movimentado, visando diferentes cenas, alterando a distância focal e outras propriedades da câmera. Você pode ter muitas câmeras e alternar entre elas. Você pode até filmar em várias câmeras ao mesmo tempo.

As coordenadas típicas da câmera são: posição no mundo virtual, direção da face, vetor ascendente, campo de visão etc.

Viewport é uma tela de cinema. É um local onde a imagem gravada pela câmera é mostrada. No mundo dos PCs, é uma área da tela em alguma janela ou imagem em tela cheia. Você pode mostrar feeds de várias câmeras ao mesmo tempo (como nos jogos de corrida de console entre 2-4 jogadores).

As coordenadas típicas da janela de visualização são: posição na tela, altura e largura.

Kromster diz apoio Monica
fonte
0

As coordenadas da janela de visualização são as coordenadas em que são colocadas na tela. (Por exemplo, dentro de uma janela win32).

As coordenadas da câmera são a posição da câmera DENTRO da janela de exibição, que fica dentro do espaço 2D / 3D que você definiu no aplicativo OpenGL. A câmera não pode sair dessa janela de exibição porque está no espaço que você definiu onde o opengl pode fazer seu trabalho, dentro de uma janela do Win32.

Seca
fonte
Isso não é totalmente preciso. A viewport define o mapeamento do espaço NDC para o espaço da janela para transformação de vértice. Nas versões mais antigas do GL, esse mapeamento também se aplicava à transformação de posição de varredura (mas que foi removida). No entanto, existem muitas operações contábeis que não são restritas pela transformação de vértice e, portanto, você pode fazer coisas como limpar o buffer de cores fora da janela de exibição. De fato, a única maneira de restringir a limpeza de um buffer para uma região específica do framebuffer é usar uma coisa completamente diferente, chamada caixa de tesoura ( glScissor (...)).
Andon M. Coleman