Computação Gráfica IComputação Gráfica I
CRAb – Grupo de Computação Gráfica
Departamento de ComputaçãoUFC
Objetivos
• Estudar – equipamentos, técnicas de programação e conceitos matemáticos
• Para
2
• Para– representação, manipulação e projeção de objetos bi- e tridimensionais– aplicar a problemas específicos
Sumário do Curso
• Sistemas Gráficos e Modelos• Programação Gráfica• Input e Interação• Objetos Geométricos e Transformações
3
• Objetos Geométricos e Transformações• Visualização• Pintura• Técnicas Discretas• Implementação de um Renderizador
5.1 Visualização Clássica e Computacional
5.1.0 Ingredientes– Objeto a ser projetado • Representado no frame da câmera
– Plano de projeção• Equação: n . x = d →→→→ nxx + nyy + nz z= d
5
• Equação: n . x = d →→→→ nxx + nyy + nz z= d– Centro de projeção (COP)• Origem do frame da câmera
– Raio de projeção• Conecta um ponto do objeto ao centro de
projeção• Intercepta o plano de projeção• Equação paramétrica: P(αααα) = P + αααα u
5.1 Visualização Clássica e Computacional
– Quando o COP se desloca para o infinito• O vetor u (direção de projeção – DOP) dos
raios de projeção ficam idênticos– Raios de projeção paralelos
6
COP
Perspectiva Paralela
Projeções Geométricas Planares
5.1 Visualização Clássica e Computacional
5.1.1 Visualização clássica– Utiliza a noção de Face Principal– Utilizada em arquitetura e desenho
técnico
7
técnico– Visões• Frontal (F)• Posterior (P)• Lateral direita (LD)• Lateral esquerda (LE)• Inferior (I)• Superior (S)
F PLDLE
I
S
5.1 Visualização Clássica e Computacional
5.1.2 Projeções ortográficas– Projeção paralela– Raios de projeção perpendiculares ao
plano de projeção
9
plano de projeção
5.1 Visualização Clássica e Computacional
5.1.3 Projeções axonométricas– Projeção ortográfica especial• Vetor normal ao plano de projeção forma– Ângulos iguais com os eixos x, y e z: Isométrica– Ângulos iguais com dois eixos: Dimétrica
10
– Ângulos iguais com dois eixos: Dimétrica– Ângulos diferentes com os eixos x, y e z: Trimétrica
5.1 Visualização Clássica e Computacional
5.1.4 Projeções oblíquas– Projeção paralela mais geral– Raios de projeção formam ângulo
arbitrário com o plano de projeção
12
arbitrário com o plano de projeção– Se o ângulo for 45o: Projeção Cavaleira
(cavalier)– Se o ângulo entre a direção de projeção e
a normal ao plano for θθθθ = tg-1(1/2): Projeção Cabinet
5.1 Visualização Clássica e Computacional
5.1.5 Visão em perspectiva– Diminuição do tamanho dos objetos mais
afastados do plano de projeção– Não permite tirar medidas
14
– Não permite tirar medidas– Adequada para visões realistas em
arquitetura e animação
5.1 Visualização Clássica e Computacional
– Objetos mais distantes do plano de visão têm projeções menores que os mais próximos de mesmo tamanho
Ponto de Fuga
15
Fuga
5.1 Visualização Clássica e Computacional
– Perspectiva com um ponto de fuga• Uma face paralela ao plano de projeção• Linhas perpendiculares ao plano de projeção são projetadas como linhas convergentes em um ponto (ponto de fuga)
16
um ponto (ponto de fuga)
Ponto de fuga
5.1 Visualização Clássica e Computacional
– Perspectiva com dois pontos de fuga• Há linhas paralelas ao plano de projeção• Há linhas paralelas que pertencem a faces oblíquas ao plano de projeção– são projetadas como linhas convergentes para dois
17
– são projetadas como linhas convergentes para dois pontos de fuga
Ponto de fuga 1
Ponto de fuga 2
5.1 Visualização Clássica e Computacional
– Perspectiva com três pontos de fuga• Há linhas paralelas que pertencem a três faces oblíquas ao plano de projeção– são projetadas como linhas convergentes para três pontos de fuga
18
Ponto de fuga 1 Ponto de
fuga 2
Ponto de fuga 3
5.2 Visualização computacional
• Com o OpenGL escolhemos visão– Perspectiva ou– Ortográfica
• Qualquer visão clássica pode ser
19
• Qualquer visão clássica pode ser obtida com o posicionamento adequado da câmera
• C ←←←← CProjectionCModel_View
vértices CModel_View CProjection vértices
5.3 Posicionamento da câmera (A20)
5.3.1 Posicionamento do frame da câmera– Default: Frame da câmera coincide com o
frame do mundox
20
-zc
xc=xw
yc=ywzc=zw
w
xw
yw
zw
c
zc
xc
ycCâmera
5.3 Posicionamento da câmera (A20)
– Exemplos simples de posicionamento do frame da câmera• Exemplo 1: Câmera na posição C = (0, 0, d)– Construir a matriz que muda de coordenadas do
mundo para coordenadas da câmera
0001
21
– Carregar essa matriz com o comando glLoadMatrixf(T); (Essa matriz é equivalente à gerada com o comando glTranslatef(0.0, 0.0, -d)
−=
1000
100
0010
0001
dT
zc
ycyw
zw
P
5.3 Posicionamento da câmera (A20)
• Exemplo 2: Câmera na posição C = (d, 0, 0)Apontando para a origem– Construir a matriz que muda de coordenadas do
mundo para coordenadas da câmera
−001 dxc
22
−
=
−
=
1000
0001
0010
0100
1000
0100
0010
001
R
T
d
zc
ycyw
xw
zw
glLoadMatrixf(R);glMultMatrixf(T);Desenha cenário;
5.3 Posicionamento da câmera
• Exemplo 2: continuação... – A operação é equivalente a» Deixar a câmera fixa» Girar o cenário de -90 graus» Transladar o cenário de (0, 0, -d)
xx
23
glLoadIdentity();glTranslatef(0.0, 0.0, -d);glRotatef(-90.0, 0.0, 1.0, 0.0);Desenha cenário;
zc
ycyw
xw
xc
zw
xw
zw
-90o
-d
5.3 Posicionamento da câmera (A20)
• Exemplo 3: Câmera na posição C = (d/√√√√3, d/ √√√√ 3, d/ √√√√ 3)apontando para a origem (visão isométrica)– Construir a matriz que muda de coordenadas do
mundo para coordenadas da câmera
24
−−
−
=
−
−
−
=
1000
03
13
13
1
06
16
26
1
02
102
1
10003
100
3010
3001
R
T
d
d
d
glLoadMatrixf(R);glMultMatrixf(T);Desenha cenário;
5.3 Posicionamento da câmera (A20)
5.3.2 Duas APIs de visualização– PHIGS e GKS3D– View-reference point (VRP): Localização
da câmera
25
da câmera• set_view_reference_point (x, y, z);
– View-plane normal (VPN): orientação da direção –z da câmera• set_view_plane_normal(nx, ny, nz);
– View-up vector: Vetor auxiliar para definir o eixo y da câmera• set_view_up(vup_x, vup_y, vup_z);
5.3 Posicionamento da câmera (A20)
5.3.3 A função Look-At– Eye point: Posição da câmera em
coordenadas do mundo– At point: Ponto para onde a câmera aponta• vpn = e – a
26
• vpn = e – a
– Up direction: direção do top da câmera– Seqüência
glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy,
upz);Desenhe objeto aqui
5.3 Posicionamento da câmera (A20)
5.3.4 Outras APIs de visualização– Simulador de vôo usa • Pitch • Yaw z
27
• Roll
xy
5.3 Posicionamento da câmera (A20)
– Transformação de Pitch (Rotação em x)• De: sistema de coordenadas do avião antes • Para: sistema de coordenadas do avião depois
0001
28
( ) ( )( ) ( )
Pitch
Antes
PP
PPPitch
Depois
1000
0θcosθsen-0
0θsenθcos0
0001
PP
=
5.3 Posicionamento da câmera (A20)
– Transformação de Yaw (Rotação em y)• De: sistema de coordenadas do avião antes • Para: sistema de coordenadas do avião depois
( ) ( )RR 0θsen-0θcos
29
( ) ( )
( ) ( )Yaw
Antes
RR
RR
Yaw
Depois
1000
0θcos0θsen
0010
0θsen-0θcos
PP
=
5.3 Posicionamento da câmera (A20)
– Transformação de Roll (Rotação em z)• De: sistema de coordenadas do avião antes • Para: sistema de coordenadas do avião depois
( ) ( )RR 00θsenθcos
30
( ) ( )( ) ( )
Roll
Antes
RR
RR
Roll
Depois
1000
0100
00θcosθsen
00θsenθcos
PP
=-
5.3 Posicionamento da câmera (A20)
5.3.4 Outras APIs de visualização(cont…)– Orientação geográfica• Azimute• Elevação
31
• Ângulo de torção
N
S
LO
θaz θaz
θel
θt
xz
x
z
y y
5.3 Posicionamento da câmera (A20)
– Transformação de Azimute (Rotação -y)• De: sistema de coordenadas anterior• Para: sistema de coordenadas depois
( ) ( )AzAz 0θsen0θcos
32
( ) ( )Azimute
Antes
AzAz
Azimute
Depois
1000
0θcos0θsen-
0010PP
=
5.3 Posicionamento da câmera (A20)
– Transformação de Elevação (Rotação x)• De: sistema de coordenadas antes• Para: sistema de coordenadas depois
0001
33
( ) ( )( ) ( )
Elevação
Antes
elel
elelElevação
Depois
1000
0θcosθsen-0
0θsenθcos0
0001
PP
=
5.3 Posicionamento da câmera (A20)
– Transformação de torção (Rotação -z)• De: sistema de coordenadas antes • Para: sistema de coordenadas depois
( ) ( )tt 00θsen-θcos
34
( ) ( )( ) ( )
Torção
Antes
tt
tt
Torção
Depois
1000
0100
00θcosθsen
00θsen-θcos
PP
=
5.4 Projeções simples (A21)
5.4.1 Projeções perspectiva
-z
y Projetor
z
P
P’COP
35
OBSERVAÇÃO: d é o produto escalar de um ponto do plano de projeção com o vetor normal ao plano.
Logo, d TEM SINAL
-z
d
Plano de Projeção
z COP
5.4 Projeções simples (A21)
– P = (x, y, z): Ponto a ser projetado– P’ = (x’, y’, z’): Projeção do ponto P– Equação do plano de projeção: n . X* = d• (0, 0, 1) . (x*, y*, z*) = z* = d
36
– Equação do projetor: P(αααα) = P(1 – αααα)– P’ é a interseção do projetor com o plano
z’ = d = z(1 – αααα’) →→→→ αααα’ = 1 - d/zx’ = x (1 – αααα’) = x (d/z) = x / (z/d)y’ = y (1 – αααα’) = y (d/z) = y / (z/d)
5.4 Projeções simples (A21)
– Em coordenadas homogêneas um ponto (x, y, z) ∈∈∈∈ R3 é representado por (w x, w y, w z, w)
– Assim
⋅1 x
37
=→∈
=
⋅
⋅
⋅
=→∈
=
)/(
')//(
)//(
'
1
1
1
1
3
3
dz
z
y
x
d
dzy
dzx
z
y
x
z
y
x
h
h
PRP
PRP
5.4 Projeções simples (A21)
– Projeção perspectiva em coordenadas homogêneas
hhPMP aPerspectiv
z
y
x
z
y
x
=
=
=0100
0010
0001
'
38
– No R3 →→→→ P’ = P’h/w • Cada ponto tem seu w• Todo ponto com o mesmo z tem o mesmo w
hhPMP aPerspectiv
z
ddz
z=
=
=
10/100
0100
)/(
'
P CModel_View CProjection P’Divisãopor w
5.4 Projeções simples (A21)
5.4.2 Projeções ortográficas– Projetores paralelos – Projetores perpendiculares ao plano de
projeção • Direção projetores = vetor normal ao plano
39
• Direção projetores = vetor normal ao plano• P(αααα) = P + ααααn
– P’ é a interseção do projetor com o planoz’ = d = z + αααα’ 1 →→→→ αααα’ = d - zx’ = x + (d - z) 0 = xy’ = y + (d - z) 0 = y
5.4 Projeções simples (A21)
– Projeção ortográfica em coordenadas homogêneas
hhPMP aOrtográfic
z
y
x
dd
y
x
=
=
=000
0010
0001
'
40
– No R3 →→→→ P’ = P’h/w (w = 1)
hhPMP aOrtográfic
zdd=
=
=
11000
000
1
'
P CModel_View CProjection P’Divisãopor 1
5.5 Projeções no OpenGL (A21)
5.4.1 Perspectiva no OpenGL
41
Ângulo de visão
Frustum: Planos de corte
5.5 Projeções no OpenGL (A21)
• Comando para definição do volume de visualização (Frustum)
glFrustum(xmin, xmax, ymin, ymax, near, far)
42
Observação 1: Sempre entrar near > 0 e far > 0
Observação 2: Frustum pode ser assimétrico
5.5 Projeções no OpenGL (A21)
glMatrixMode(GL_PROJECTION);glLoadIdentity();
glFrustum(xmin, xmax, ymin, ymax, near, far);
43
5.5 Projeções no OpenGL (A21)
• Outra alternativa (glut)gluPerspective(fov, aspect, near, far);
44
aspect =w/h no plano de projeção
5.5 Projeções no OpenGL (A21)
• Outra alternativa (glut)gluPerspective(fov, aspect, near, far);• fov: ângulo de abertura vertical em graus
entre 0 e 180 abertura entre planos superior e inferior
45
abertura entre planos superior e inferior• aspect: w/h da janela no plano de projeção• near > 0: distância do plano de corte anterior• far >0: distância do plano de corte posterior
– O frustum criado é simétrico • Tronco de pirâmide reto
5.5 Projeções no OpenGL (A21)
• Comando para definição do volume de visualização
glOrtho(xmin, xmax, ymin, ymax, near, far);
47
5.5 Projeções no OpenGL (A21)
glMatrixMode(GL_PROJECTION);glLoadIdentity();
glOrtho(xmin, xmax, ymin, ymax, near, far);
48
5.5 Projeções no OpenGL (A21)
glOrtho(xmin, xmax, ymin, ymax, near, far);• Paralelepípedo pode ser posicionado em qualquer lugar do espaço da câmera• near e far podem ser positivos ou negativos
y
49
y
z -z
near >0
far >0
near < 0
far < 0
View
point
zbufferzbuffer
5.5 Projeções no OpenGL (A21)
y
z -z
near > 0
far < 0
View
point NearFar
y
z -z
near < 0
far > 0
View
point FarNear
50
z -z
zbuffer
z -z
zbuffer
5.6 Remoção de superfícies ocultas
5.6.0 Categorias de algoritmos– Remoção de superfícies ocultas• Elimina as superfícies que não podem ser
vistas pelo observador• Algoritmos de Espaço-do-Objeto
51
• Algoritmos de Espaço-do-Objeto• Algoritmos de Espaço-da-Imagem
– Identificação de superfícies visíveis• Encontra as superfícies que são visíveis pelo
observador
– OpenGL usa o algoritmo z-buffer• Algoritmo Espaço-da-Imagem
5.6 Remoção de superfícies ocultas
– Algoritmos de Espaço-do-Objeto• Ordenam as superfícies dos objetos da cena• Processam a pintura das superfícies em uma
ordem específica– Exemplo: Cubo
52
– Exemplo: Cubo» Faces posteriores pintadas primeiro» Faces anteriores pintadas por cima
• Não funcionam bem em pipeline pois os objetos são passados em ordem arbitrária
• Precisam de todos os objetos para poder ordená-los
5.6 Remoção de superfícies ocultas
– Algoritmos de Espaço-da-Imagem• Funcionam como parte do processo de
projeção• Determinam a relação entre os pontos dos
objetos em cada projetor• Z-buffer
53
• Z-buffer– Tem a mesma resolução espacial do color-buffer– Resolução de profundidade 16, 24 ou 32 bits– No OpenGL o z-buffer é um dos buffers que
constituem o frame-buffer– Inicializado com a maior distância ao observador– Modficado com as distâncias dos pontos mais
próximos do observador
5.6 Remoção de superfícies ocultas
– Z-buffer
Plano de projeção
Z-buffer inicializado
Color buffer inicializado
21
54
COP
z1 z2
Modificado zs triângulo
Modificado cor triângulo
Modificado zs da esfera
Modificado cor da esfera
21
2
3
4
4
5.6 Remoção de superfícies ocultas
– Comandos para habilitar o z-bufferglutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB
| GLUT_DEPTH);
glEnable(GL_DEPTH_TEST);
55
glClear(GL_DEPTH_BUFFER_BIT);
5.6 Remoção de superfícies ocultas
5.6.1 Culling– Remove as faces cujas normais apontam
na direção oposta do observador– Culling é suficiente para objeto convexo
56
– Culling é suficiente para objeto convexo • Se objeto estiver só no cenário
– No OpenGL basta habilitar o processoglEnable(GL_CULL_FACE);
– Se a cena for complexa, utilizar culling combinado com z-buffer
5.7 Andando por um cenário
• Comando gluLookAt posiciona a câmeragluLookAt(vrpx, vrpy, vrpz, atx, aty, atz, upx, upy, upz);
• keyboard callback incrementa ou decrementa componentes do vrpX incrementa vrp Y
57
X incrementa vrpxY incrementa vrpyZ incrementa vrpzx decrementa vrpxy decrementa vrpyz decrementa vrpz
Xx
Y
y
Z
z
5.7 Andando por um cenário
•Keyboard callbackvoid keyboard(unsigned char key, int mousex, int mousey){if(key=='q' || key =='Q') exit(0);if(key=='x')viewer[0] -= 1.0;
Y
z
58
if(key=='x')viewer[0] -= 1.0;if(key=='X')viewer[0] += 1.0;if(key=='y')viewer[1] -=1.0;if(key=='Y')viewer[1] += 1.0;if(key=='z')viewer[2] -= 1.0;if(key=='Z')viewer[2] += 1.0;glutPostRedisplay();
}
Xx
y
Z
z
Código Fonte Código Exec
5.8 Matrizes de projeções paralelas
5.8.1 Normalização da projeção– Toda projeção é convertida em projeção
ortográfica• Distorcer objetos
Distorcer(Normalizar)
Projeçãoortográfica
59
• Projeção ortográfica do objeto distorcido é igual à projeção desejada
COP
Perspectiva Ortográfica
5.8 Matrizes de projeções paralelas
5.8.2 Matrizes de projeções ortogonais– Decompor projeção em duas partes• Conversão do volume de visualização em um
volume padrão– Preserva profundidade
60
– Preserva profundidade– Utilizado para clipping– Utilizado para eliminação de superfícies ocultas
• Eliminação da coordenada z (projeção ortográfica)
– OpenGL diferencia• Screen coordinates (coordenadas de tela): 2D• Window coordinates: 3D
5.8 Matrizes de projeções paralelas
– Volume de visualização canônico• Cubo 2 x 2 x 2 centrado na origem– x = ± 1– y = ± 1– z = ± 1
61
– z = ± 1
• Default do OpenGLglMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
y
z -z
near < 0
far > 0
View
point FarNear
5.8 Matrizes de projeções paralelas
– Volume de visão definido por glOrthoglOrtho(xmin, xmax, ymin, ymax, near, far);
(xmin, ymin, zmax)
(xmax, ymax, zmin)y
62
zmin = -near
zmax = -far
(xmin, ymin, zmax)
x
y
z
x
z
5.8 Matrizes de projeções paralelas
– Transformar coordenadas • Para sistema paralelo ao da câmera, passando
pelo centro do volume de visualizaçãocentro = ( (xmin+xmax)/2,
(ymin+ymax)/2,
63
(zmin+zmax)/2 )
– Aplicar escala nos três eixos • para que o volume de visualização fique
2x2x2 (volume canônico)sx = 2/(xmax – xmin)sy = 2/(ymax – ymin)sz = 2/(zmax – zmin)
5.8 Matrizes de projeções paralelas
– Matriz de transformação concatenada• M = ST
+−
−+
−−
2
002
minmax
minmax
minmax
yy
xx
xx
xx
64
[ ][ ]
−+
−−
−+
−−==
1000
200
02
0
minmax
minmax
minmax
minmax
minmax
minmax
zz
zz
zz
yy
yy
yyTSM
5.8 Matrizes de projeções paralelas
– Matriz de transformação concatenada• M = ST
+−
−+
−−
02
0
002
minmax
minmax
minmax
minmax
yy
xx
xx
xx
65
−+
−
−+
−−=
1000
200
02
0minmax
minmax
minmax
nearfar
nearfar
nearfar
yy
yy
yyM
5.8 Matrizes de projeções paralelas
5.8.3 Projeções obliquas– D: vetor unitário que define a direção de
projeção (coordenadas de câmera)– Projetores são paralelos a D
66
– Projetores são paralelos a D– Algumas arestas do volume de
visualização são paralelas a D– Aplicar cisalhamento nas direções x e y
para que os projetores fiquem perpendiculares ao plano xy
5.8 Matrizes de projeções paralelas
– Fatores de cisalhamento• SHx= - Dx/Dz
• SHy= - Dy/Dz xy
67
D
Dx
Dy
x z
y
Dy
Dz
5.8 Matrizes de projeções paralelas
– Matrizes de cisalhamento concatenadas
=0100
0SH10
0SH01
y
x
xySH
68
– Normalização[M] = [S][T][SHxy]
=
1000
0100xySH
Observação: Os valores xmin, xmax, ymin, ymaxusados em [S] e [T] são definidos pela janela no plano de projeção
5.9 Matrizes de projeções perspectivas
5.9.1 Normalização da perspectiva– Volume de visualização: pirâmide não-
reta• Cisalhamento xy: pirâmide reta
69
• Escala nas direções x e y: laterais da pirâmide reta formam ângulos de 45 graus com os planos xz e yz
zx
zx
zx
Cisalhamento Escala
5.9 Matrizes de projeções perspectivas
– Matriz de projeção em perspectiva sobre o plano z=-1• x’ = -x/z• y’ = -y/z• z’ = -z/z
P
z=-1
71
• z’ = -z/z
−
=
=
⇒
−
=
z
z
y
x
z
y
x
W
Z
Y
X
1'
'
'
'
0100
0100
0010
0001
MM
Observação: Todos os pontos sobre o projetor têma mesma imagem x’. M é singular
5.9 Matrizes de projeções perspectivas
– Construir matriz não singular N
−
+=
=
⇒
−
=
z
z
y
x
z
y
x
W
Z
Y
X
βαβα1'
'
'
'
0100
00
0010
0001
MN
72
+−=
−=
−=
−
−
zz
zyy
zxx
zW
βα'
/'
/'
1'0100
5.9 Matrizes de projeções perspectivas
– Considere volume de visualização• Pirâmide reta• Planos laterais inclinados 45 graus: x=±z, y=±z y
73
Pl. Projeçãoz=-1
zmin=-far
zmax=-near
zz
y
zmin=-1
zmax=1
Escolherαααα e ββββ
5.9 Matrizes de projeções perspectivas
– Escolha de αααα e β β β β ( )( )
±=−=
±=−=
⇒
−=
−=
⇒
+
1/'
1/'
/'
/' zzy
zzx
zyy
zxx
z
y
x
ββα
m
m
74
−=
−+
−=⇒
=+
−=+
±=
+−=
⇒
+−=
−=⇒
−
+
minmax
minmax
minmax
minmax
min
max
min
max
21
1
1'
'
/'
zz
zz
zz
zz
z
z
z
zz
zz
zyy
z
z
β
α
βα
βα
βα
βα
βα
5.9 Matrizes de projeções perspectivas
5.9.2 Transformações de perspectiva no OpenGL–– CisalhamentoCisalhamento: transforma o frustum em
pirâmide reta
75
–– EscalaEscala: transforma em pirâmide canônica • Faces laterais formam 45 graus com os planos
xz e yz
–– NormalizaçãoNormalização: garante que depois da divisão por w o volume de visualização transforma-se no cubo canônico (2××××2××××2)
5.9 Matrizes de projeções perspectivas
5.9.2 Transformações de perspectiva no OpenGL–– CisalhamentoCisalhamento: transforma o frustum em
pirâmide reta
76
–– EscalaEscala: transforma em pirâmide canônica • Faces laterais formam 45 graus com os planos
xz e yz
–– NormalizaçãoNormalização: garante que depois da divisão por w o volume de visualização transforma-se no cubo canônico (2××××2××××2)
5.9 Matrizes de projeções perspectivas
– Cisalhamento• Centro da face near, C
++= max
maxminmaxmin ,2
,2
zyyxx
Cnear
far
77
• Fatores, SHx e Shy
max
maxmin
max
maxmin
2SH
2SH
z
yy
z
xx
y
x
+−=
+−=
zmax zmin
z
Projetor
c
∆∆∆∆
5.9 Matrizes de projeções perspectivas
– Implicações dos Fatores de Cisalhamento• Centro da face near, C
C(+,+)C(-,+)y
∆x<0∆x>0
78
C(+,-)C(-,-)
ximax
max
i CC
−=−=∆ zz
∆x>0 ∆x<0
∆y<0∆y<0
∆y>0 ∆y>0
5.9 Matrizes de projeções perspectivas
– Escala nos eixos x e y
maxf
minmaxminmax
max
i
f
near22LS
near22
L
LS
z
xxxx
zx
⋅===
−⋅
=−
==
80
zmax zmin
zLiLf
minmaxminmaxi
f
LS
yyyyy −
=−
==
Observação: Sx e Sy >0 pois1) xmax – xmin > 02) ymax – ymin > 03) near > 0 e far > 0
5.9 Matrizes de projeções perspectivas
–Matriz de Escala
⋅−
⋅
near2
000near2
minmax xx
81
−⋅
=
1000
0100
00near2
0minmax yy
S
5.9 Matrizes de projeções perspectivas
– Normalização
−−+
−= 2
00
0010
0001
minmax
minmax
minmax
minmax
zz
zz
zz
zzN
82
−−⋅
−+=
−−−
0100
200
0010
0001
0100minmaxminmax
nearfar
nearfar
nearfar
nearfar
zzzz
N
5.9 Matrizes de projeções perspectivas
Concatenação de transformaçõesMpers= [N][S][SH]
( )( )
( )
+−
+−
−2
002
maxminmax
minmaxmax
minmax
max
yyzz
zxx
xxz
xx
z
83
( )( )
−−−
+−
−
+−
−=
0100
200
02
0
minmax
minmax
minmax
minmax
maxminmax
minmaxmax
minmax
max
pers
zz
zz
zz
zz
zyy
yyz
yy
z
M
5.9 Matrizes de projeções perspectivas
Concatenação de transformaçõesMpers= [N][S][SH]
( )( )( )
+−+
−2
002
minmax
minmax
minmax
yynear
xx
xx
xx
near
84
( )( )
−−⋅
−+−+
−=
0100
200
02
0minmax
minmax
minmax
minmaxminmax
pers
nearfar
nearfar
nearfar
nearfar
yy
yy
yy
near
M
5.10 Projeções e sombras
• Introdução
– Sombra de um objeto sobre outro
• Cálculo complexo
– Sombra de um objeto sobre um plano
85
– Sombra de um objeto sobre um plano
• Caso trivial de projeção plana
• Depende do tipo de iluminação
– Fonte de luz pontual →→→→ Projeção perspectiva
– Fonte de luz no infinito →→→→ Projeção oblíqua
5.10 Projeções e sombras
• Fonte de luz Pontual em (Lx, Ly, Lz)– Projeção sobre o plano xz (y = 0)
y Fonte Pontual
86
x
z
5.10 Projeções e sombras
• Fonte de luz pontual em (Lx, Ly, Lz)– Projeção sobre o plano yz (x = 0)
−+= )()('
Projetor
LPPP αα
87
−
=
−−=
−+=
=
−+=
x
xz
xy
xx
x
xxx
L001
0L0L-
00LL-
0000
LP
P
)LP(P0
0 x'Coordenada
)()('
M
LPPP
α
α
αα
5.10 Projeções e sombras
• Fonte de luz pontual em (Lx, Ly, Lz)– Projeção sobre o plano xz (y = 0)
−+= )()('
Projetor
LPPP αα
88
−
=
−−=
−+=
=
−+=
y
yz
xy
yy
y
yyy
L010
0LL-0
0000
00L-L
LP
P
)LP(P0
0y' Coordenada
)()('
M
LPPP
α
α
αα
5.10 Projeções e sombras
• Fonte de luz pontual em (Lx, Ly, Lz)– Projeção sobre o plano xy (z = 0)
−+= )()('
Projetor
LPPP αα
89
−
=
−−=
−+=
=
−+=
z
yz
xz
zz
z
zzz
L100
0000
0L-L0
0L-0L
LP
P
)LP(P0
0z' Coordenada
)()('
M
LPPP
α
α
αα
5.10 Projeções e sombras
• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano xz (y = 0)
y D
90
x
z
5.10 Projeções e sombras
• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano yz (x = 0)
+=)('
Projetor
DPP αα
91
=
−=
+=
=
+=
1000
010D
D-
001D
D-
0000
D
P
DP0
0 x'Coordenada
)('
x
z
x
y
x
x
xx M
DPP
α
α
αα
5.10 Projeções e sombras
• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano xz (y = 0)
+=)('
Projetor
DPP αα
92
=
−=
+=
=
+=
1000
01D
D-0
0000
00D
D-1
D
P
DP0
0y' Coordenada
)('
y
z
y
x
y
y
yy M
DPP
α
α
αα
5.10 Projeções e sombras
• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano xy (z = 0)
+=)('
Projetor
DPP αα
93
=
−=
+=
=
+=
1000
0000
0D
D-10
0D
D-01
D
P
DP0
0z' Coordenada
)('
z
y
z
x
z
z
zz M
DPP
α
α
αα