Desenho de objetos em OpenGL -- Computação Gráfica

jSSessão 4.5  

 

 

         4.5. Projeção Paralela


   

Observe na figura 4.5.1 que na projeção paralela, as linhas que unem pontos as suas projeções são paralelas, por isso para a projeção Pp = (xp, yp, zp) de um ponto P = (x, y, z) teremos que xp = x e yp = y. Dessa forma iremos assumir que z=0, para que possamos simplificar a descrição matemática desse tipo de projeção, logo a projeção de um ponto P = (x, y, z) será um ponto Pp = (x, y, 0).

       
     
4.5.1 - Na projeção paralela as linhas que unem pontos as suas projeções são paralelas.

         

Como a projeção paralela pode ser vista como uma projeção perspectiva onde o centro de projeção está no infinito o valor de D (distância do centro de projeção ao ponto (0,0, zp), neste caso zp = 0) será infinito.

  

Com os valores de D e zp já definidos, podemos simplificar a matriz projeção genérica (apresentada na seção 4.3 ), obtendo uma matriz de projeção paralela genérica (a qual chamaremos de MPgeral), que pode ser vista na figura 4.5.2.

     

     

4.5.2 - Matriz de Projeção Paralela Genérica.

   

Para exemplificarmos, vamos considerar que a direção de projeção é a mesma da normal do plano de projeção (ortogonal), assim temos que dx = 0, dy = 0 e dz = -1. Dessa forma podemos resumir os parâmetros para nossa projeção conforme a figura 4.5.3.

  

  

4.5.3 - Parâmetros para se definir a matriz de projeção Mpar.

  

Substituindo estes valores podemos simplificar nossa matriz de projeção paralela geral, construindo a matriz Mpar (figura 4.5.4).

   

   

4.5.4 - Matriz de Projeção Paralela onde a direção de projeção é (0, 0, -1).

  

Veja que com a simplificação da matriz geral, para este caso especial de projeção paralela, não precisamos conhecer nenhum dados da projeção, pois os coeficientes da matriz são todos constantes. Entretanto, se fossemos projetar um cubo utilizando essa projeção, teríamos o mesmo resultado encontrado nos dois casos de projeção perspectiva onde a direção da câmera era ortogonal ao plano de projeção, iríamos ver somente um quadrado (figura 4.5.5).

     

   

4.5.5 - Exemplo de uma projeção utilizando Mpar.
 

            

Em OpenGL já vem definida também uma matriz de projeção com direção ortogonal default para a projeção paralela. Como na projeção perspectiva, para realizar uma projeção deste tipo em OpenGL (utilizando esta matriz default) é necessário se definir apenas o volume visível (figura 4.5.6). 

   

4.5.6 - Volume visível de uma Projeção Paralela.

   

Na figura acima o volume visível é definido pelo paralelepípedo. Observe que é especificado os valores de X máximo e mínimo assim como os valores de Y máximo e mínimo. O valor de Near é igual a -Z min e o valor de Far é igual a - Z max. Como na projeção perspectiva, somente será visualizado o que estiver dentro deste volume visível.

   

A projeção paralela utilizando a matriz default deve ser definida pelos seguintes comandos:

    >> glMatrixMode( GL_PROJECTION ); 
    >> glLoadIdentity(); 
    >> glOrtho
(X min, X max, Y min, Y max, Near, Far);

Observe que somente mudou o nome da última função (glOrtho) em relação a projeção perspectiva (glFrustum)

Para ilustrar esta projeção paralela usaremos um exemplo simples da projeção de duas pirâmides. Neste exemplo, o procedimento Render somente desenha dois objetos. O código do evento Reshape é mostrado abaixo:  

static void Reshape(int width, int height)
{
    glViewport(0,0,width,height);     
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity(); 
    gl
Ortho(-10, 10, -10, 10, 1.8, 7);   // define o volume visível da projeção paralela
}

 

O resultado do exemplo pode ser visto na figura 4.5.7.

   

4.5.7 - Projeção Paralela utilizando a matriz default.

 

        

Para exemplificar projeções onde a direção de projeção não é ortogonal ao plano de projeção, iremos mostrar três casos especiais de projeção paralela: isométrica, cavalier e cabinet.

A projeção isométrica é uma projeção onde o plano de projeção (e conseqüentemente a direção de projeção) faz o mesmo ângulo com cada eixo principal (x, y, e z). Existem apenas oito direções (uma em cada octante) que satisfazem esta condição. Por exemplo: (1, 1, 1), (1, -1, -1) e (-1, -1, -1).  Essa projeção é muito útil, pois as medidas junto aos eixos são feitas na mesma escala (iso: igual, metric: medida). Para exemplificar, vamos definir a matriz Miso de uma projeção isométrica com direção de projeção igual a (-1, -1, -1). Os parâmetros dessa projeção podem ser vistos na figura 4.5.8.

   

4.5.8 - Parâmetros para se definir a matriz de projeção Miso.

   

Substituindo estes valores podemos simplificar a nossa matriz de projeção paralela geral, construindo a matriz Miso (figura 4.5.9).

    

   

4.5.9 - Matriz de Projeção Isométrica.

       

Veja o resultado da visualização dessa projeção na figura 4.5.10.    

    

   

4.5.10 - Visualização da projeção de um cubo utilizando Miso.
 

 

   

As projeções cabinet e cavalier são muito utilizadas em engenharia. Para a projeção cavalier, a direção de projeção faz um ângulo de 45º  com o plano de projeção. Já a projeção cabinet, tem uma direção de projeção fazendo um ângulo de arctan(2) = 63,4º com o plano de projeção. Para estas projeções, considerando t o ângulo entre o eixo z e o eixo x (tipicamente 30º ou 45º), teremos como parâmetros das matrizes Mcav (cavalier) e Mcab (cabinet) os valores mostrados na figura 4.5.11.

  

  

4.5.11 - Parâmetros para se definir as matrizes para as projeções: (a) Cavalier. (b) Cabinet.

   

Veja na figura 4.5.12 as matrizes resultantes das projeções cavalier e cabinet para t = 45º.

   

       

4.5.12 - Matrizes de Projeção para t = 45º. (a) Cavalier. (b) Cabinet.

 

A figura mostra as projeções cavalier e cabinet de um cubo para t = 45º.

    

     

4.5.13 - Projeções Paralela de um cubo. (a) Projeção Cavalier. (b) Projeção Cabinet.
 

              

 

 

[principal]

[anterior]

[próxima]