Title: Computa
1Computação Gráfica Transformações Projetivas
- Profa. Mercedes Gonzales Márquez
2Tópicos
- Conceito de Projeção
- Projeção Paralela (Ortográfica) e Projeção
Perspectiva - Projeções em OpenGL
3A Câmera OpenGL
- O modelo de visualização em OpenGL, é similar a
uma câmera fotográfica! - Tripé visualização
- Modelo modelagem
- Lente projeção
- Papel viewport
4Analogia da Câmera (OpenGL)
- O processo de transformação para produzir a cena
desejada para visualização é análogo a tirar uma
foto com uma câmera. Os passos são - 1. Orientar a câmera em direção da cena
(transformação de visualização) - 2. Posicionar devidamente o(s) objeto(s), a serem
fotografados, no cenário (transformações
geométricas estudadas em aula, também chamadas
transformações de modelagem). - 3. Escolher o lente da câmera ou ajustar o zoom
(transformação de projeção). - 4. Determinar o tamanho desejado para a
fotografia final (transformação de viewport).
5Transformações Projetivas
- A projeção permite a visualização bidimensional
de objetos tridimensionais. - Para gerar a imagem de um objeto 3D a partir de
um ponto de vista dado, é necessário realizar a
sua projeção, ou seja, converter as suas
coordenadas 3D em coordenadas 2D.
6Elementos básicos da Projeção
- Plano de Projeção
- Projetante, ou raio projetante
- Centro de projeção.
P
y
Raio de Projeção
P
Plano de Projeção
x
z
Centro de Projeção
7Elementos básicos da Projeção
- Plano de Projeção A superfície onde será
projetado o objeto, ou seja, onde ele será
representado em 2D - Projetante, ou raio projetante Retas que passam
pelos pontos do objeto e pelo centro de projeção. - Centro de projeção Ponto fixo de onde os raios
projetantes partem.
8Tipos de Projeção
- Existem dois tipos de projeção
- Projeção Paralela, Ortogonal ou ortográfica
- Projeção perspectiva
9Tipos de Projeção
- Projeção perspectiva É a mais realista, pois é
análogo ao processo de formação de imagens em
nossos olhos ou numa câmera fotográfica.
Considera a profundidade como elemento de seu
cálculo e apresenta um resultado mais familiar ao
observador humano.
10Tipos de Projeção
- (b)Projeção Paralela ou ortográfica É a
projeção ortogonal de um ponto no plano de
projeção. Pode ser vista como uma projeção
perspectiva onde o centro de projeção está no
infinito.
11Projeção Paralela
- As linhas que unem os pontos A e B às suas
projeções A e B são paralelas, isto faz com que
o segmento projetado tenha o mesmo tamanho para
qualquer distância entre o plano de projeção e o
objeto.
12Tipos de Projeção
13Matriz de Projeção Paralela
- Se quisermos a projeção ortográfica em relação ao
plano xy (ou z0), a matriz em coordenadas
homogêneas é
- Se no lugar do plano z0 for escolhido outro
plano qualquer zTz paralelo a ele, a matriz será
14Modelo perspectivo ideal
p
y
x
o
P1
z
O
p1
f
Plano imagem
P
y
x
p1
Plano imagem
O
o
P1
p
z
f
P
15Matriz de Projeção Perspectiva
y
Plano de projeção
x
(x,y,z)
f
Centro de projeção
(x,y)
- Por similaridade de triângulos temos
16Projeções em OpenGL
A transformação de projeção em OpenGL descreve
como especificar a forma e orientação do volume
de visualização. O volume de visualização
determina
- como a cena será projetada na tela (com projeção
paralela ou perspectiva) e
- quais objetos ou partes de objetos serão
eliminados da cena.
17Projeção paralela ortográfica
18Projeção em perspectiva
- Centro de projeção fixo eye (posição da câmera)
- Duas possibilidades
- Determina um tronco de pirâmideglFrustrum
- Determina o ângulo de visãogluPerspective
19Definição do volume de visualização
- glFrustrum(left, right, bottom, top, near,
far)nao precisa ser simétrico - gluPerspective(fovy, aspect ratio, near,
far)simétrico - Esses comandos definem a matriz de projeção
(PROJECTION)
20glFrustrum
21glFrustrum
22gluPerspective
23gluPerspective
24Matrizes de transformação
- glMatrixMode(GL_PROJECTION)
- Define tipo e parâmetros da projeção
25Exemplo Cubo (Programa cube.c)
- Um cubo é escalado pela transformação de
modelagem glScalef (1.0, 2.0, 1.0). A
transformação de visualização gluLookAt(),
posiciona e orienta a câmera em direção do cubo.
As transformações de projeção e viewport são
também especificadas.
26Exemplo Cubo (Programa cube.c)
- Example 3-1 Transformed Cube cube.c
- include ltGL/gl.hgt
- include ltGL/glu.hgt
- include ltGL/glut.hgt
- void init(void)
- glClearColor (0.0, 0.0, 0.0, 0.0)
- glShadeModel (GL_FLAT)
27Exemplo Cubo (Programa cube.c)
- void display(void)
- glClear (GL_COLOR_BUFFER_BIT)
- glColor3f (1.0, 1.0, 1.0)
- glLoadIdentity () / clear the matrix /
- / viewing transformation /
- gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0,
1.0, 0.0) - glScalef (1.0, 2.0, 1.0) / modeling
transformation / - glutWireCube (1.0)
- glFlush ()
28Exemplo Cubo (Programa cube.c)
- void reshape (int w, int h)
- glViewport (0, 0, (GLsizei) w, (GLsizei) h)
- glMatrixMode (GL_PROJECTION)
- glLoadIdentity ()
- glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0)
- glMatrixMode (GL_MODELVIEW)
29Exemplo Cubo (Programa cube.c)
- int main(int argc, char argv)
- glutInit(argc, argv)
- glutInitDisplayMode (GLUT_SINGLE GLUT_RGB)
- glutInitWindowSize (500, 500)
- glutInitWindowPosition (100, 100)
- glutCreateWindow (argv0)
- init ()
- glutDisplayFunc(display)
- glutReshapeFunc(reshape)
- glutMainLoop()
- return 0
30Exercício
- Modifique o programa cube.c de forma que
- (a) Projete o cubo ortogonalmente.
- (b) Projete o cubo em perspectiva porém com a
função gluPerspective().
31glViewPort
glViewPort (x,y,width, height) Define um
retângulo de pixels na janela no qual a imagem
final será mapeada. (x,y) o canto inferior
esquerda da viewport e (width,height) largura e
altura do retângulo da viewport Por default os
valores iniciais são (0,0,w,h) onde w, h são os
tamanhos pré-definidos da janela.
32glViewPort
A razão da viewport deve ser igual à razão do
volume de visualização. Se as duas razões forem
diferentes, a imagem projetada será distorcida ao
ser mapeada na viewport.
33Exercício
- O programa planet.c usa glRotate() para
rotacionar um planeta ao redor do sol e para
rotacionar o planeta ao redor do seu próprio
eixo.
- Modifique o programa para que acrescente mais
dois planetas com seus respectivos satélites.
Como se trata de objetos hierárquicos use
glPushMatrix e glPopMatrix (vide aula).
34Exercício
- Seguindo a orientação dada nos slides de
transformações geométricas, faça um programa que
desenhe um carro com cinco parafusos em cada uma
das suas quatro rodas.