Visualização
Tridimensional
Quando se trabalha em três dimensões, o
SRU (Sistema de Referência do Universo)
passa a ser composto por três eixos
ortogonais entre si (x,y e z) e pela origem
(0.0,0.0,0.0). Uma coordenada é agora
formada pelos valores de x, y e z, que
correspondem às posições ao longo dos
respectivos eixos
O processo de visualização 3D é mais
complexo do que o 2D, pois compreende
um numero maior de etapas. Esta
complexidade existe porque quase todos os
dispositivos de saída, tais como monitores
e impressoras, são somente 2D. Assim é
preciso definir como a cena 3D e projetada
em uma imagem 2D.
Visualização 3D: câmera sintética
* Corresponde ao pipeline clássico de
visualização de objetos 3D;
* Câmera é localizada e orientada no SRU;
* Coordenadas dos objetos são transformadas
para o SRC;
* Coordenadas são projetadas no plano de
projeção;
* Coordenadas são mapeadas para a viewport.
Câmera Sintética (Observador)
A primeira etapa do processo de
visualização 3D é a definição da cena 3D.
Nesta etapa cada um dos objetos que farão
parte do mundo 3D é incluído e
posicionado no SRU (escala, translação e
rotação).
O próximo passo consiste na especificação
do observador virtual, um componente
fundamental do processo de visualização
3D. Este observador define de que local
deseja-se que a cena 3D seja exibida, por
exemplo, de cima, do lado direito ou do
esquerdo.
Portanto, a especificação do observador
inclui a sua posição e orientação, ou seja,
onde o observador está e para onde ele
está olhando dentro do universo. A
necessidade da existência do observador
deve-se ao fato de que um mesmo
conjunto de objetos 3D, visto de diferentes
lugares, tem diferentes coordenadas para
cada posição.
Câmera Fotográfica
Como a imagem gerada a partir da posição e
orientação do observador é estática, faz-se
analogia com uma foto. Pode-se dizer que se
obtém uma fotografia quando a câmera está em
uma determinada posição direcionada para o
objeto. A posição da câmera é dada por um
ponto (x,y,z) e sua orientação é dada por um
ponto alvo (x,y,z) e um vetor chamado up.
Projeções
Paralela Ortográfica – As projetantes são
paralelas entre si, passam pelos pontos que
definem os objetos e interseccionam o plano
com um ângulo de 90 graus.
Perspectiva – As projetantes emanam de um
único ponto que está a uma distância finita do
plano de projeção e passam pelos pontos que
definem os objetos.
Transformações de Visualização

Duas interpretações:



Up
Levam a câmera até a cena que se
quer visualizar
Levam os objetos da cena até
uma câmera estacionária
gluLookAt(Obsx,Obsy,O
bsz,alvox,alvoy,alvoz
,upx, upy, upz);
Obs = ponto onde a câmera será
posicionada
Alvo = ponto para onde a câmera
será apontada
up = vetor que dá a direção
“para cima” da câmera.
y
alvo
Obs
x
z
Funções OpenGL
As funções descritas abaixo são utilizadas
para configurar a câmera sintética e a
projeção perspectiva quando se está
trabalhando com OpenGL
gluLookAt; define a transformação de visualização.
Seu protótipo é: void gluLookAt( GLdouble
obsx, GLdouble obsy, GLdouble obsz,
GLdouble alvox, GLdouble alvoy, GLdouble
alvoz, GLdouble upx, GLdouble upy, GLdouble
upz );. Descrição dos parâmetros: obsx, obsy e
obsz são usados para definir as coordenadas x, y e
z, respectivamente, da posição da câmera (ou
observador); alvox, alvoy e alvoz são usados para
definir as coordenadas x, y e z, respectivamente, da
posição do alvo, isto é, para onde o observador está
olhando; upx, upy e upz são as coordenadas x, y e z,
que estabelecem o vetor up.
gluPerspective; Esta função estabelece os parâmetros da
Projeção Perspectiva, atualizando a matriz de projeção
perspectiva. Seu protótipo é: void gluPerspective( GLdouble
fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar );.
Descrição dos parâmetros: fovy é o ângulo, em graus, na direção
y (usada para determinar a "altura" do volume de visualização);
aspect é a razão de aspecto que determina a área de visualização
na direção x, e seu valor é a razão em x (largura) e y (altura);
zNear, que sempre deve ter um valor positivo maior do que
zero, é a distância do observador até o plano de corte mais
próximo (em z); zFar, que também sempre tem um valor
positivo maior do que zero, é a distância do observador até o
plano de corte mais afastado (em z). Esta função sempre deve
ser definida ANTES da função gluLookAt, e no modo
GL_PROJECTION.
Exemplo 1
O código fonte “Exemplo3D.cpp desenha um
cubo com projeção perspectiva. O cubo é um
dos objetos predefinidos da biblioteca GLUT.
As funções gluPerspective e gluLookAt são
utilizadas como segue:
gluPerspective(60, fAspect, 0.5, 500);
gluLookAt(40, 60, 100, 0, 0, 0, 0, 1, 0);
Projeção Ortográfica
Para trabalhar com projeção ortográfica, basta
configurá-la através da chamada para a seguinte
função:
Void glOrtho(GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top, GLdouble
near, GLdouble far)
Os valores left e right especificam os limites min
e max no eixo X; analogamente, bottom e top
especificam os limites min e max no eixo Y,
enquanto near e far especificam os limites min e
max no eixo Z, geralmente com os valores
negativos para o lado oposto da posição do
observador.
Exercício 1
Aplicar no codigo fonte Exemplo3D.cpp uma
projeção ortográfica utilizando a função
glOrtho:
glOrtho(-65.0, 65.0, -65.0, 65.0, -400.0, 400.0);
Download

Visualização Tridimensional