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).
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.
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.
Substituindo
estes valores podemos simplificar nossa matriz de projeção paralela geral,
construindo a matriz Mpar (figura 4.5.4).
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).
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 ); 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)
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.
Substituindo estes valores podemos simplificar a nossa matriz de projeção paralela geral, construindo a matriz Miso (figura 4.5.9).
Veja
o resultado da visualização dessa projeção na figura 4.5.10.
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.
Veja
na figura 4.5.12 as matrizes resultantes das projeções cavalier e
cabinet para t = 45º.
A figura mostra as projeções cavalier e cabinet de um cubo para t = 45º.
|
[anterior] |
[próxima] |