Post on 15-Nov-2018
CC BY-SA 2017
Engenharia de Computação
CEFET/RJ – campus Petrópolis
Prof. Luis Retondaro
Aula 6
Projeções
Computação Gráfica
2
Projeções Geométricas
– Projeções permitem a visualização bidimensional de objetos tridimensionais.
– Para gerar a imagem de um objeto 3D, precisamos converter as coordenadas 3D em coordenadas 2D, que correspondam a uma visão do objeto de uma posição específica
3
Projeções Geométricas
Elementos básicos– Plano de projeção– Raio projetante– Centro de projeção
• Exemplo da projeção de um ponto em um plano. • O plano de projeção é a superfície onde os pontos do
objeto serão projetados• Todos os pontos visíveis do objeto devem ser projetados
no plano de projeção
4
Projeções Geométricas
Transformações projetivas– Levam retas em retas– Não preservam combinações afim
5
Projeções Geométricas
Geometria Euclideana– duas retas paralelas não se encontram.
Geometria Projetiva: – não existe paralelismo.
• Retas paralelas se encontram num ponto ideal (no infinito)• Para não haver mais de um ponto ideal para cada inclinação
de reta, assume-se que o plano projetivo se fecha sob si mesmo
• Em 2D, o plano projetivo tem uma borda, que é uma reta no infinito (constituída de pontos ideais)
• Transformações projetivas podem levar pontos ideais em pontos do plano euclidiano e vice-versa
• Problema: O plano projetivo é uma variedade não orientável
6
Projeções Geométricas
Geometria Projetiva
7
Projeções Geométricas
Classificação– dependem das relações entre
• o centro projeção• o plano de projeção• as direções das linhas ou raios de
projeção
8
Projeções Geométricas
Classificação
9
Projeções Geométricas
Perspectivas e Paralelas
10
Projeções Paralelas
– O centro de projeção é localizado no infinito
– Todas as linhas de projeção são paralelas entre si
11
Projeções Paralelas Ortográficas
– As linhas de projeção são paralelas entre si e perpendiculares ao plano de projeção
12
Projeções Paralelas Ortográficas
Axonométricas– Isométricas são as mais comuns
• os ângulos no plano de projeção entre os eixos principais projetados são iguais entre si, e iguais a 120°
13
Projeções Paralelas Oblíquas
– As projeções oblíquas são produzidas por um conjunto de linhas de projeção inclinadas em relação ao plano de projeção de qualquer ângulo
– A forma geral de definição de matrizes de projeção oblíquas usa um vetor unitário e sua projeção
– As projeções oblíquas podem ser produzidas com ângulos de linhas de projeções diferentes em relação ao plano de projeção
14
Projeções Paralelas Oblíquas
Cavaleira (cavalier)
– Quando as linhas de projeção fazem um ângulo de 45 graus com o plano de projeção• pontos projetados preservam sua medida original nas direções não-
paralelas ao plano de projeção
– Não é importante, nesta classificação, o ângulo com que a direção não-paralela ao plano de projeção aparecerá na imagem projetada• assim ambas as imagens acima são de projeções oblíquas cavaleiras• embora a profundidade do cubo apareça em ângulos diferentes em cada
uma delas
15
Projeções Paralelas Oblíquas
Cabinet
– faz um ângulo específico com o plano de projeção, de modo a reproduzir objetos com uma dimensão de meta de do tamanho original.
– Somente a face do objeto, paralela ao plano de projeção, permanece com o seu tamanho sem distorção (ou com a verdadeira grandeza)
– Esse ângulo é tal que tenha tangente=2, ou seja, é de aproximadamente 63,4o
16
Câmera virtual
Visualização– O processo de visualização do OpenGL
define uma câmera virtual– Objetos da cena são projetados sobre o
plano de projeção (como um filme virtual) e exibidos na tela
– Existem vários sistemas de coordenadas envolvidos, afim de reduzir o problema a uma configuração canônica
17
Câmera virtual
– Coordenadas da câmera e seus 7 graus de liberdade:• Localização no espaço (x, y, z)• Ângulos de rotação em torno de cada um dos
eixos• foco
18
Coordenadas Homogêneas em Espaço Projetivo
Não há distinção entre pontos e vetores.
Em 2D, um ponto (x,y) é representado em c.h. pelo vetor coluna [x· w y· w w]T, para w0– Assim, o ponto (4,3) pode ser representado por
[8 6 2]T, [12 9 3]T, [-4 -3 -1]T, etc
A representação canônica do ponto com coordenadas homogêneas [x y w]T, é:– [x/w y/w 1]T. – Chamamos esta operação de divisão perspectiva.
19
Exemplo
Os pontos sobre a reta x=y: (1,1), (2,2), (3,3), ...– Podem ser representados em c.h. por: • [1 1 1]T, [1 1 ½]T, etc
– O ponto ideal dessa reta é [1 1 0]T
20
Transformações Projetivas
• A projeção de um ponto P é dada por:
• Plano de projeção é:1. perpendicular ao eixo z2. está a uma distância d
do C.P. (0,0,0)3. intercepta o semi eixo z
negativo
P'=[ Px
−Pz /d
P y
−Pz /d−d 1 ]
T
y
z
P=(Px ,Py ,Pz ) Plano de projeção
d
• Por semelhança de triângulos, vemos que Px/-Pz = P’x/d
P’=(P’x ,P’y ,P’z )
((0,0,0)
21
Transformação Perspectiva em Coordenadas Homogêneas
Não existe matriz 3x3 capaz de realizar tal transformação em espaços Euclideanos.– Porém, no espaço projetivo:
P'=[
1 0 0 00 1 0 00 0 1 00 0 −1/d 0
]×[Px
P y
P z
1]=[
Px
P y
P z
−P z/d]=[
Px
−P z/ dP y
−P z/ d
−d1
]
22
Perspectiva - Sumário
• Para fazer projeção perspectiva de um ponto P, seguem-se os seguintes passos:1. P é levado do espaço Euclideano para o
projetivo.• Trivial – mesmas coordenadas homogêneas.
2. P é multiplicado pela matriz de transformação perspectiva resultando em P’
3. P’ é levado novamente ao espaço Euclideano • Divisão perspectiva (não linear!!).
23
Projeção Genérica
• E se for usado um sistema de coordenadas arbitrário?
1. Centro de Projeção fora da origem ou2. Cena não está posicionada no semi-eixo z negativo.
• Muda-se o sistema de coordenadas. transformações afim posicionam todos os
elementos corretamente.
• As maneiras pelas quais essas transformações são executadas caracterizam um dado modelo de projeção.
24
Espaços de Referência
1. Espaço do objeto.2. Espaço da cena.3. Espaço da câmera.4. Espaço normalizado.5. Espaço de Ordenação.6. Espaço da imagem.
25
Modelo de Câmera Sintética
• OpenGL utiliza uma analogia comparando visualização 3D com tirar fotografias com uma câmera
câmera
tripé modelo
Volume de visão
26
Transformações em OpenGL
Modelagem– Mover /deformar os objetos
Visualização– Mover e orientar a câmera
Projeção– Ajustar a lente / objetiva da câmera
“Viewport”– Aumentar ou reduzir a fotografia
27
Sistema de Coordenadas da Câmera
28
Pipeline de Transformações do OpenGL
Transformação“viewport”
Transformação“viewport”
DivisãoPerspectiva
DivisãoPerspectiva
Matriz deProjeção
Matriz deProjeção
Matriz deModelagem
e Visualização
Matriz deModelagem
e Visualização
vertice
objeto olho recortenormalizadasde dispositivo janela
C o o r d e n a d a s
29
Estado Inicial do Pipeline
As matrizes “modelview” e “projection” são matrizes identidade:
• vértices não são transformados • projeção é paralela sobre o plano x-y• o mundo visível é restrito ao cubo -1 ≤ x,y,z ≤
1
A transformação “viewport” mapeia o quadrado -1 ≤ x,y ≤ 1 (em coordenadas normalizadas de dispositivo) na superfície total da janela
30
Especificando a Viewport
Para especificar a área da janela na qual será mapeado o quadrado do plano de projeção:
glViewport (x0, y0, largura, altura)• parâmetros em pixels• (0,0) refere-se ao canto inferior esquerdo da janela
Normalmente, não é necessário modificar, mas é útil para:– manter a razão de aspecto da imagem– fazer zooming e panning sobre a imagem
31
Especificando TransformaçõesAs matrizes modelview e projection se situam no topo de duas pilhas que são usadas para fazer operações com matrizes.Para selecionar a pilha:
glMatrixMode(GL_MODELVIEW ou GL_PROJECTION)
Existe uma série de funções que operam com a pilha corrente, incluindo
glLoadIdentity () glMultMatrix ()glLoadMatrix () glPushMatrix ()glPopMatrix ()
32
Transformando Objetos
Para para multiplicar o topo da pilha de matrizes por transformações especificadas por parâmetros:– glTranslatef ( x, y, z )– glRotatef (ângulo, x, y, z)– glScale ( x, y, z )– Cuidado: ordem é importante:
glTranslatef (10, 5, 3);glRotatef (10, 0, 0, 1);glBegin (GL_TRIANGLES);…• Objeto é rodado e depois transladado!
33
Transformações de Visualização
Duas interpretações:– Levam a câmera até a
cena que se quer visualizar– Levam os objetos da cena
até uma câmera estacionária
• gluLookAt( eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz); eye = posição da câmera aim = ponto que define a
direção de visão up = direção “vertical” da
câmera Cuidado com casos
degenerados
x
y
z
aim
eye
up
34
Projeção Paralela
Default em OpenGLPara ajustar o volume visível, a matriz de projeção é iniciada com
glOrtho (left, right, bottom, top,
near, far); Obs.: near e far são
valores positivos tipicamente
35
Projeção em Perspectiva
Volume de visão especificado com glFrustum(left,right,bottom,top,near,far); Não necessariamente gera um v.v. simétrico.
36
Projeção Perspectiva
Alternativamente, pode-se usar a rotinagluPerspective (fovy, aspect, near, far);
Gera um volume de visão simétrico (direção de visão perpendicular ao plano de projeção).
37
Receita Para Evitar ‘telas pretas’
Especificar Matriz de projeção com gluPerspective()
Tentar levar em conta a razão de aspecto da janela (parâmetro aspect)– Sempre usar glLoadIdentity() antes– Não colocar nada depois
Especificar Matriz de visualização com gluLookAt– Sempre usar glLoadIdentity () antes– Outras transformações usadas para mover /
instanciar os objetos aparecem depois
38
Exemplo
void resize( int w, int h )
{ glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, (GLdouble) w / h,
1.0, 100.0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); gluLookAt( 0.0, 0.0, 5.0,
0.0, 0.0, 0.0, 0.0, 1.0, 0.0 );
}