8 Projeções e trackball virtual

Em síntese de imagens, utilizamos técnicas de projeção gráfica para converter objetos tridimensionais (3D) em representações bidimensionais (2D) sobre superfícies. Em particular, estamos interessados em projeções planares, pois desejamos projetar objetos 3D sobre o plano de imagem da câmera virtual.

No capítulo 4, vimos que é comum considerar que a câmera virtual é baseada em uma câmera pinhole ideal. Nesse modelo, o plano de imagem está posicionado à frente da câmera, e a imagem é formada através da projeção dos objetos tridimensionais no plano, na direção da posição da câmera/olho (figura 8.1).

Projeção de um triângulo no plano de imagem de uma câmera virtual.

Figura 8.1: Projeção de um triângulo no plano de imagem de uma câmera virtual.

As linhas tracejadas que saem de cada vértice do objeto 3D e atravessam o plano de imagem são chamadas de projetores. Se os projetores convergem em um centro de projeção, o resultado é uma projeção perspectiva (figura 8.2).

Projeção perspectiva.

Figura 8.2: Projeção perspectiva.

A projeção perspectiva produz o efeito de diminuição do tamanho aparente dos objetos distantes, como percebemos no mundo real. Assim, a projeção perspectiva é o tipo de projeção mais adequada para simular a visão de um observador em um cenário virtual.

Se os projetores são paralelos, temos uma projeção paralela (figura 8.3). Na projeção paralela, é como se o centro de projeção estivesse a uma distância infinita do plano de projeção.

Projeção paralela.

Figura 8.3: Projeção paralela.

Projeções paralelas são frequentemente utilizadas em desenhos técnicos, pois segmentos paralelos em 3D continuam paralelos quando projetados.

Projeções paralelas podem ser classificadas em dois grandes grupos segundo o ângulo formado entre os projetores e o plano de projeção. Se os projetores formam um ângulo de \(90^{\circ}\) com o plano de projeção, temos uma projeção ortográfica. Caso contrário, temos uma projeção oblíqua.

Projeções ortográficas e oblíquas podem ainda ser classificadas segundo os ângulos formados entre os eixos principais após a projeção, e a forma como as distâncias são preservadas.

A seguir é apresentada uma classificação hierárquica das principais projeções planares. Exemplos correspondentes são mostrados na figura 8.4:

  • Projeção perspectiva: projetores convergem em um centro de projeção.
  • Projeção paralela: projetores são paralelos entre si.
    • Projeção ortográfica: projetores são perpendiculares ao plano de projeção.
      • Projeção multivista: é o uso de diferentes pontos de vista de projeção ortográfica, cada um em uma direção paralela a um dos eixos \(x\), \(y\) e \(z\), compondo um conjunto de imagens chamadas de planos e elevações. Na projeção multivista, é comum desenhar o objeto de frente (elevação frontal), de lado (elevação lateral) e de cima (plano).
      • Projeção axonométrica: projeção ortográfica em uma vista que não é paralela a nenhum dos eixos principais.
        • Isométrica: os 3 eixos projetados formam um ângulo comum de \(120^{\circ}\) entre si.
        • Dimétrica: 2 dos eixos projetados formam um ângulo comum com outro eixo.
        • Trimétrica: não há ângulo em comum entre os eixos projetados.
    • Projeção oblíqua: projetores não são perpendiculares ao plano de projeção.
      • Cavalier: 2 dos eixos projetados formam um ângulo comum entre si, e as distâncias são preservadas nas três direções.
      • Cabinet: similiar à projeção cavalier, mas a distância na profundidade é metade da distância nas outras direções.
      • Outras: variações da projeção cavalier.
Exemplos de projeções planares ([fonte](https://commons.wikimedia.org/wiki/File:Graphical_projection_comparison.png)).

Figura 8.4: Exemplos de projeções planares (fonte).

Neste capítulo, abordaremos a construção de duas matrizes de projeção no OpenGL:

  • Matriz de projeção perspectiva (seção 8.1);
  • Matriz de projeção ortográfica (seção 8.2);

Essas matrizes serão utilizadas para converter coordenadas do espaço da câmera para coordenadas do espaço de recorte no pipeline de renderização. Através da matriz de projeção perspectiva e projeção ortográfica é possível gerar qualquer tipo de projeção planar da classificação anterior.

Nosso foco será o uso da projeção perspectiva. Entretanto, descreveremos primeiramente a projeção ortográfica por ser mais simples e por ser a projeção padrão adotada pelo pipeline quando a matriz de projeção não é utilizada.

Observação

As projeções multivista e axonométricas utilizam a mesma matriz de projeção ortográfica que iremos construir. A diferença entre cada subtipo de projeção é determinada pela orientação da câmera (matriz de visão).

Por exemplo, para obter uma projeção isométrica, basta usar a matriz de projeção ortográfica e criar a matriz de visão através de uma câmera LookAt com parâmetros

\[ \begin{align} P_{\textrm{eye}}&=(c,c,c),\\ P_{\textrm{at}}&=(0,0,0),\\ \mathbf{v}_{\textrm{up}}&=(0,1,0), \end{align} \]

para qualquer \(c > 0\).

Projeções oblíquas podem ser obtidas através da concatenação de uma matriz adicional de transformação de cisalhamento à matriz de projeção ortográfica. Uma matriz de transformação de cisalhamento tem a forma

\[ \mathbf{H(\theta,\phi)}= \begin{bmatrix} 1 & 0 & -\cot \theta & 0\\ 0 & 0 & -\cot \phi & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}, \]

onde \(\theta\) e \(\phi\) determinam os ângulos entre os projetores e os eixos \(x\) e \(y\), respectivamente.

Se \(\mathbf{M}_{orth}\) é a matriz de projeção ortográfica, então a concatenação \(\mathbf{M}_{orth}\mathbf{H(\theta,\phi)}\) produz uma projeção oblíqua se \(\theta\) ou \(\phi\) forem diferentes de \(\pm\frac{\pi}{2}\).

Além do conteúdo sobre projeções, este capítulo também apresenta a teoria (seção 8.3) e prática (seção 8.4) da implementação de uma técnica de interação chamada de trackball virtual. Essa técnica permite que o usuário use o mouse para realizar rotações livres de objetos 3D.

O capítulo é concluído com a seção 8.5, que apresenta um passo a passo de implementação de um efeito visual que só pode ser obtido com a transformação perspectiva.