pipeline de visualização câmara virtual · definir planos de recorte • paralelos ao plano de...
TRANSCRIPT
Pipeline de Visualização
Câmara Virtual
1
Problema
Detecção Colisões
O que entende por “falsa colisão”?
Falsa colisão corresponde à detecção de intersecção de
volumes envolventes mas em que os objectos nelas
contidos não se intersectam.?
2
Problema
Detecção Colisões
Explique porque a utilização de dois tipos de volumes
envolventes associados a um mesmo objecto é útil?
É desejável combinar um volume envolvente com menor
precisão mas melhor desempenho (e.g. esfera) e outro
com maior precisão mas menos eficiente. O primeiro é
usado como despiste, sendo o segundo apenas
executado no caso do primeiro teste ser positivo.?
3
Sumário
Câmara Virtual
Pipeline de Visualização 3D
4
Sistema de Visualização Geral
5
Sistema de Visualização Geral
WCS(3D)
DC(2D)
6
Sistema de Visualização Geral
Posição da câmara
Posição e Orientação do plano de visualização
Volume de Visualização
… em WCS
7
Computação GráficaCâmara Virtual
8
Geração de Vistas
9
Modelo da Câmara Virtual Simples
Parâmetros:
VRP: Posição da câmara(View Reference Point)
VPN: Direcção para onde aponta a câmara(View Plane Normal)
VUV: Rolamento da câmara(View UpVector)
D: Distância de VRP ao plano de projecção
VPN
VUV
VRP
VRP
D
VPN
10
(UP)
(V)
(C)(notação do livro)
Viewing Reference Coordinates
VPNWCSvn
u
ywcs
xwcs
zwcs
VRPWCS
11
Viewing Reference Coordinates
Origem em VRP
(u, v, n) sistema ortogonal “mão esquerda”.
vpnv
nu
yw
xw
zw
VRP
u
v
n
n “sai” da câmara
12
Determinar VRCSequência de passos para determinar os versores u, v, n (em WCS)
𝑛 =𝑉𝑃𝑁
𝑉𝑃𝑁
v
nu
yw
xw
zw
𝑉𝑈𝑉 = 𝑉𝑈𝑉′ − 𝑛(𝑛 ∙ 𝑉𝑈𝑉′)
𝑣 =𝑉𝑈𝑉
𝑉𝑈𝑉
𝑢 = 𝑛 × 𝑣
VUV
VPN
VUV’
V
UP UP’
𝑛 =𝑉
𝑉
𝑈𝑃′ = 𝑝𝑟𝑜𝑗𝑈𝑃′ |𝑛 + 𝑈𝑃
𝑈𝑃 = 𝑈𝑃′ − 𝑝𝑟𝑜𝑗𝑈𝑃′|𝑛
𝑈𝑃 = 𝑈𝑃′ − 𝑛 𝑛 ∙ 𝑈𝑃′
𝑣 =𝑈𝑃
𝑈𝑃
𝑢 = 𝑛 x 𝑣
𝑉𝑈𝑉′ = 𝑝𝑟𝑜𝑗 𝑉𝑈𝑉′|𝑛 + 𝑉𝑈𝑉
𝑉𝑈𝑉 = 𝑉𝑈𝑉′ − 𝑝𝑟𝑜𝑗𝑉𝑈𝑉′|𝑛
13
(notação do livro)
Janela de Visualização
Plano de
Visualização
Janela de
Visualização
u
VRP
vVPN
h
w
14
Modelo da Câmara Virtual Simples
Até agora introduziram-se os parâmetros:
VRP em coordenadas WCS
Vectores orientação (VPN e VUV´) em coordenadas WCS
Dimensões H e W da janela de visualização
15
Volume de Visualização
Contem tudo o que é “visível” pela câmara
16
Projecções Geométricas Planas
• Determinada pelo centro de projecção (CDP)
• Os raios projectores são convergentes
A
B
B´
A´
CDP
Raios
Projectores
Plano de
Projecção
• Determinada por direcção de projecção
• Os raios projectores paralelos entre si
A
B
B´
A´
Direcção de
Projecção
Raios
Projectores
Plano de
Projecção
17
Volume de Visualização
Projecção Perspectiva
Definido pelo tronco de pirâmide infinita
vértice no centro de projecção (VRP)
lados sobre a janela de visualização.
Recorte da cena sobre este volume antes da projecção
não ficam projectados objectos atrás do centro de projecção
vpn
v
n
u
yw
xw
zw
z
v
CP
18
Abertura do Volume Perspectivo
FOV: Field of View
V : abertura
vertical
tg (V / 2) = h / D
VRP
Jan. Vis.
CP
v
n
h
D
W : abertura
horizontal
tg (W / 2) = w / DVRP
Jan. Vis.
CP
un
w
D
Vista lateral do volume
Vista topo do volume
Yv
Zv
Zv
Xv
4 Planos laterais no referencial VRC
Xv = + (w / D) * Zv
Yv = + (h / D) * Zv19
Volume de Visualização
Projecção Ortogonal
Definido pelo paralelipípedo infinito
passando pelos lados da janela de visualização
de arestas paralelas à direcção VPN.
O eixo central do paralelipípedo
• coincide com o eixo n.
paralelepípedo (FOV = 0)
VPN
largura
altura
u
v
Projecção e
Recorte
mais Simples
20
Construção do
Volume de Visualização
Definir planos de recorte
• paralelos ao plano de projecção
• através da sua distância a VRP
medida ao longo da direcção de VPN
Plano anterior
• distância N ao centro de projecção (VRP)
Plano posterior
• distância F ao centro de projecção (VRP)
Restrições (Referencial VRC orientado segundo “mão esquerda”):
• Distância N positiva;
• Distância N < Distância F
21
Planos de Recorte
Volume entre planos de recorte
determina o que a camara vê
Posição dos planos definida por
distância na direcção do VPN
plano recorte
anterior
plano recorte
posterior
ignorado desenhado recortado ignorado
22
VV na projeção Perspectiva
(Frustum)
VRP
Pl. anterior
Jan. Vis.Pl. Posterior
zv
Eixo central CP
F
N
VRP
Plano anteriorJanela de
visualizaçãoPlano posterior
CP
F
N
Eixo
central
D
D
V
H
zv
23
VV na Projecção Ortogonal
zv
largura
altura
u
v
VRP
24
Câmara Virtual e Volume de Visualização
Parâmetros
VRP
VPN
VUV’
D
N, F
H, W,
FOVx, FOVy
Posi
ção d
a
Câm
ara
Lim
ites
Vol.
Vis
ual
izaç
ão
25
Volu
me
Ort
ogo
nal
Volu
me
Par
spect
ico
Definição dos
Volumes de Visualização (VV)
-W xv W
-H yv H
N zv F
- (W / D) * zv xv (W / D) * zv
- (H / D) * zv yv (H / D) * zv
N zv F
26
VV Ortogonal em three.js
27
VV Perspectiva em three.js
28
Sistema de Visualização Geral
WCS(3D)
DC(2D)
Pipeline de
Visualização 3D
29
Pipeline de Visualização 3D
30
Pip
elin
e V
isual
izaç
ão 3
D
31
O que é uma Pipeline?
Vídeo:
Modern Times (Charlie Chaplin, 1936) – The factory scene
32
O que é um Pipeline?
Vídeo:
Modern Times (Charlie Chaplin, 1936) – The factory scene
33
O que é uma Pipeline?
Conceptualmente:
Conjunto de tarefas executadas sequencialmente
Pipeline é a base da linha de montagem industrial
Em computação:
Conjunto de elementos de processamento de dados ligados
em série
• Os dados produzidos por um andar do pipeline são processados pelo
andar seguinte
34
Pipeline Visualização 3D
Input: Cena 3D
possibilidade de utilizar aplicações
de modelação
• Autocad
• 3DStudioMax
• Maia,
• Blender,
• etc…
Output: Imagem no ecrã
35
Sequência de Operações
Primeiro Andar do Pipeline
Responsável pela obtenção de tempo-real, interactividade e
incremento do realismo. Andar codificado em software.
Input: base de dados da cena.
Suporte de periféricos de Input/Output
Navegação
Técnicas de aceleração
Detectar colisões
Gera uma “sopa” de polígonos
36
Segundo Andar
Processamento Geométrico
Transformação de Visualização
Cálculo de Iluminação
Transformação de projeção
Recorte 3D
Transformação (ou mapeamento) de viewport.
37
Terceiro Andar
Discretização
Rasterização : recebe primitivas do dispositivo (vértices, segmentos de
reta, ou poligonos convexos) e produz de fragmentos.
Calculo de cor : produção de fragmentos com côr (por
sombreamento constante, Gouraud, Phong e texturização)
Composição : Determinação de fragmentos cujas cores são
armazenadas nos pixels do buffer do cor de memória de imagem. Teste de
visibilidade usando o algoritmo Z-buffer - remoção de elementos ocultos.
38
(não nesta aula)
Pipeline de Baixo Nível
APIs Gráficas (OpenGL, Direct3D)
Transformações Geométricas
Discretização
Input
primitivas gráficas simples
• fundamentalmente polígonos
Pipeline de baixo nível em hardware
chipsets GeForce da NVidia e Radeon da ATI
39
DesempenhoComplexidade da cena
número de polígonos
reflecte-se no número de cálculos a efectuar nos andares do pipeline
de baixo nível
FLOPS
no andar das transformações Geométricas
Operações inteiras e acessos a memória
no andar de Discretização
relação com a resolução em pixels do dispositivo de saída
Desempenho de pipeline determinado por
throughput do andar mais lento
40
Desempenho (lei de Moore)
41
Desempenho
Exemplo
Cena com 1M polígonos e resolução 1280 x 1024
25 FPS
sistema terá de processar 100K polígonos por cada 40ms
9.2 GFLOPS nos cálculos geométricos
10.1 biliões operações inteiras
12.7 biliões acessos à memória
Por segundo!
Bottleneck
andar de Discretização
42
43
44
Pipeline de Visualização 3D
45
Vértices
Transfs. de
Modelação e
Visualização
Transformação
de Projecção
Divisão
Perspectiva
Mapeamento
Janela-Viewport
Coordenadas
do Mundo
Coordenadas
de Recorte
Coordenadas
do Dispositivo
Normalizadas
Coordenadas
da Câmara
Coordenadas
do
Dispositivo
VérticesWRC
(3D)
DC
(2D+1)
46
Transformação de VisualizaçãoTransformações de Visualização e Projecção
47
Vértices
Transfs. de
Modelação e
Visualização
Transformação
de Projecção
Divisão
Perspectiva
Mapeamento
Janela-Viewport
Coordenadas
do Mundo
Coordenadas
de Recorte
Coordenadas
do Dispositivo
Normalizadas
Coordenadas
da Câmara
Coordenadas
do
Dispositivo
VérticesWRC
(3D)
DC
(2D+1)
48
Transformação de Visualização (i)
Mudança de Referencial VRC WCS
1000
.
.
.
VRPnnnn
VRPvvvv
VRPuuuu
Mzyx
zyx
zyx
vis
Vamos demonstrar como chegamos a este resultado !
49
1000
0
0
0
zyx
zyx
zyx
rotnnn
vvv
uuu
M
Nota 1:
Ref. Camara – mão esquerda (aponta na dir.
positiva do eixo dos Zs)
A transformação de visualização implica uma
mudança de ref. da mão esquerda para a mão
direita (daí a troca de sinal na 3º linha).
1000
100
010
001
z
y
x
transVRP
VRP
VRP
M
Mudança de Referencial VRC WCS
Transformação de Visualização (ii)
Nota 2:
Uma vez que queremos passar de WCS
(filho) para uvn (pai), alinhamos WCS a
vpn
vn
u
yw
xwzw
VRP
Tr = - VRP !50
Transformação de Visualização (iii)
1000
.
.
.
VRPnnnn
VRPvvvv
VRPuuuu
MMzyx
zyx
zyx
transrot
Ambas as matrizes de rotação e da composição estão em
em sistemas de coordenadas orientados segundo a mão direita.
Notar que a 3ª linha da matriz de rotação (e da composição com a translação)
têm sinal negativo (i.e., o versor n aponta no sentido negativo dos Z).
A seguir os pontos resultantes (x,y,z) da composição terão de ser
convertidos para pontos (x,y,-z) a fim de se obter o referencial da mão esquerda,
que é o referencial da camara.
transrot MM
rotMtransrot MM
51
Transformação de Visualização (iv)
1000
.
.
.
VRPnnnn
VRPvvvv
VRPuuuu
MMSMzyx
zyx
zyx
transrotscalevis
1000
0100
0010
0001
scaleS
Para que os pontos (x,y,z) da composição sejam convertidos para
(x,y,-z), teremos que aplicar um escalamento S ao resutado de
Definimos então a matriz S, como
Finalmente a Matriz de visualização vem dada como
transrot MM
visM
52
(comparar com a exp. (5.4) do livro, pag. 85)
Exemplo em three.js
Cálculo da Matriz de Visualização
camera.position.set(vector) : posição da câmara
camera.lookAt(vector) : local para onde está a apontar
camera.up.set(vector) : rolamento da câmara
53
Exemplo em three.js
Cálculo da matriz de visualização
camera.position.set(new Vector(eyex, eyey, eyez));
camera.lookAt(new Vector(atx, aty, atz));
camera.up.set(new Vector(upx, upy, upz));
𝑉𝑅𝑃 = 𝑒𝑦𝑒𝑥 𝑒𝑦𝑒𝑦 𝑒𝑦𝑒𝑧𝑉𝑃𝑁 = 𝑎𝑡𝑥 − 𝑒𝑦𝑒𝑥 𝑎𝑡𝑦 − 𝑒𝑦𝑒𝑦 𝑎𝑡𝑧 − 𝑒𝑦𝑒𝑧
𝑉𝑈𝑉 = 𝑢𝑝𝑥 𝑢𝑝𝑦 𝑢𝑝𝑧
𝑛 =𝑉𝑃𝑁
𝑉𝑃𝑁
𝑢 = 𝑛 ×𝑉𝑈𝑉
𝑉𝑈𝑉
54
Exemplo em three.js
Cálculo da matriz de visualização
𝑀𝑣𝑖𝑠 =
𝑢𝑥 𝑢𝑦 𝑢𝑧 −𝑢. 𝑉𝑅𝑃
𝑣𝑥 𝑣𝑦 𝑣𝑧 −𝑣. 𝑉𝑅𝑃
𝑛𝑥 𝑛𝑦 𝑛𝑧 −𝑛. 𝑉𝑅𝑃
0 0 0 1
camera.position.set(new Vector(eyex, eyey, eyez));
camera.lookAt(new Vector(centerx, centery, centerz));
camera.up.set(new Vector(upx, upy, upz));
55
Câmara Virtual e Volume de Visualização
Parâmetros
VRP
VPN
VUV’
D
N, F
H, W
FOVx, FOVy
Posi
ção d
a
Câm
ara
Lim
ites
Vol.
Vis
ual
izaç
ão
56
Vértices
Transfs. de
Modelação e
Visualização
Transformação
de Projecção
Divisão
Perspectiva
Mapeamento
Janela-Viewport
Coordenadas
do Mundo
Coordenadas
de Recorte
Coordenadas
do Dispositivo
Normalizadas
Coordenadas
da Câmara
Coordenadas
do
Dispositivo
VérticesWRC
(3D)
DC
(2D+1)
57
Volumes CanónicosTransformações de Visualização e Projecção
58
Volume Canónico Ortogonal
yv
xv
zv
(-1, 1, 1)
(1, -1, 1)(1, -1, 0)
(-1, -1, 0)
(-1, 1, 0)
(0, 0, 1)
(1, 1, 1)
𝒙 = ±𝟏Planos de recorte 𝒚 = ±𝟏 𝒛 = 𝟎 𝒛 = 𝟏
59
Transformar VVs em
VV Ortogonal Canónico
(-1, -1, 0)
(1, 1, 1)
60
Transformações de ProjeçãoTransformações de Visualização e Projecção
61
Matriz de Projeção Ortogonal (i)
𝑁𝑜𝑟𝑡 =
1
𝓁0 0 0
01
𝒶0 0
0 01
𝑓 − 𝑛
−𝑛
𝑓 − 𝑛0 0 0 1
Adoptando o modelo de câmara virtual simples (CVS), a matriz de
transformação ortogonal é dada por:
Vamos demonstrar !
62
Matriz de Projeção Ortogonal (ii)
A matriz de transformação ortogonal resulta da transformação que converte
o volume ortogonal, no volume ortogonal canónico. Esta transformação envolve
os seguintes passos:
• Operação de translação para posicionar o objecto no centro do plano da
origem (onde o plano anterior é o plano da origem)
Obtendo Translação ortogonal -
• Operação de escalamento de modo que , e
Obtendo Escalamento ortogonal -
Tort
Sort
11 x 11 y 10 z
Finalmente a matriz de projeção ortogonal é obtida pela multiplicação das
duas matrizes anteriores, isto é:
Nort = Sort . Tort
63
No modelo de câmara virtual simples (CVS), admite-se que a janela de
visualização está centrada simetricamente em relação à direção de
visualização:
Este pressuposto implica as seguintes restrições:
1) O objeto já está centrado em relação à janela de visualização
2) O objeto já está escalado simetricamente às dimensões da janela de
visualização
-Z
Y
X
𝒶
𝓁
Matriz de Projeção Ortogonal (iii)
64
Pelas duas restrições anteriores verificamos que:
1) Não é preciso realizar a translação no plano XY, pelo que
𝒕𝒙 = 𝟎 e 𝒕𝒚= 𝟎 (objeto já está centrado em relação ao plano XY)
2) A dimensão do objeto é simétrica em relação à janela. Admtindo as
dimensões do objeto dadas por 𝒍𝒆𝒇𝒕, 𝒃𝒐𝒕𝒕𝒐𝒎, 𝒏𝒆𝒂𝒓 , (𝒓𝒊𝒈𝒉𝒕, 𝒕𝒐𝒑, 𝒇𝒂𝒓)
verificamos que:
(r,t,f)
(l,b,n)
No plano XY
(r,t)
(l,b)
ou seja𝒓 = −𝒍
𝒕 = −𝒃
Matriz de Projeção Ortogonal (iv)
65
Pelo que apenas teremos que “puxar” o objeto para o centro do plano
anterior, isto é, para o plano 0z
-Z
Y
X
n
f
(r,t,f)
(l,b,n)
“Puxar” o objeto para o centro do plano implica uma translação
𝑡𝑧 = −𝑛
-n
Matriz de Translação (i)
66
1000
100
0010
0001
1000
100
010
001
nt
t
t
Tz
y
x
ort
Atendendo a que, no modelo de câmara simples se tem a restrição
𝒕𝒙 = 𝟎 e 𝒕𝒚 = 𝟎 a translação é dada por:
Matriz de Translação (ii)
67
Matriz de Translação (iii)
No cálculo da matriz de escalamento, fazemos com que as dimensões do objecto
satisfaçam as desigualdades:11 x 11 y 10 z
(−1,−1,0)
𝑋
𝑌
−𝑍
(−1,1,0)
(1,1,1)(−1,1,1)
(1,−1,1)
(1,1,0)
(1, −1,0) (r,t,f)
(l,b,n)
𝑆𝑥 . 𝑟 − 𝑙 = 1 − −1 ⟶ 𝑆𝑥 =2
𝑟 − 𝑙
𝑆𝑦 . 𝑡 − 𝑏 = 1 − −1 ⟶ 𝑆𝑦 =2
𝑡 − 𝑏
𝑆𝑧 . 𝑓 − 𝑛 = 1 − 0 ⟶ 𝑆𝑧 =1
𝑓 − 𝑛
𝒓 = −𝒍
𝒕 = −𝒃
Mas sabemos que pela 1ª restrição
𝑆𝑥 . 2𝑟 = 2 ⟶ 𝑆𝑥 =1
𝑟=1
𝓁
Mas sabemos que pela 2ª restrição
𝑆𝑦 . 2𝑡 = 2 ⟶ 𝑆𝑦 =1
𝑡=
1
𝒶
(*1*)
(*2*)
(*3*)
68
Nort = Sort . Tort
Pelo que a matriz de escalamento é dada por (ver expressões (*1*), (*2*) e (*3*)):
A matriz de projeção ortogonal, é dada por, ou seja, tem-se
Sort . Tort =
𝑆𝑜𝑟𝑡 =
1
𝓁0 0 0
01
𝒶0 0
0 01
𝑓 − 𝑛0
0 0 0 1
1
𝓁0 0 0
01
𝒶0 0
0 01
𝑓 − 𝑛0
0 0 0 1
1 0 0 00 1 0 00 0 1 −𝑛0 0 0 1
Matriz de Projeção Ortogonal (v)
=
𝟏
𝓵𝟎 𝟎 𝟎
𝟎𝟏
𝓪𝟎 𝟎
𝟎 𝟎𝟏
𝒇 − 𝒏
−𝒏
𝒇 − 𝒏𝟎 𝟎 𝟎 𝟏
69
(comparar com a exp. (5.7) do livro, pag. 88)
𝑁𝑜𝑟𝑡 =
2
𝑟 − 𝑙0 0 −
𝑟 + 𝑙
𝑟 − 𝑙
02
𝑡 − 𝑏0 −
𝑡 + 𝑏
𝑡 − 𝑏
0 02
𝑓 − 𝑛−𝑓 + 𝑛
𝑓 − 𝑛0 0 0 1
Matriz de Projeção Ortogonal em WebGL (i)Deduzimos a matriz de projeção ortogonal admitindo um modelo da câmara
virtual simples (CVS). No entanto, na API gráfica WebGL, a matriz de projeção
ortogonal é diferente. Isto acontece, pois admite-se que o objeto não está: (i)
centrado, nem (ii) escalado no plano XY. Ou seja, não temos as restrições que
caracterizam o modelo CVS.
( Nota: Em WebGL tem-se )
Assim, em WebGL, a projeção ortogonal é dada por:
Vamos demonstrar !
70
11 x 11 y 11 z
Se o objeto não está centrado no plano (x,y), vamos desloca-lo para a origem
deste plano:
Nota: temos Centrar em (x,y), significa
t
b
l rCx
Cy
𝐶𝑥 = −𝑙 + 𝑟
2𝐶𝑦 = −
𝑡 + 𝑏
2
Matriz de Translação em WebGL (i)
71
Ou seja, translação é, neste caso, dada por:
𝑡𝑥 = −𝑙 + 𝑟
2𝑡𝑦 = −
𝑡 + 𝑏
2𝑡𝑧 = −
𝑓 + 𝑛
2
Vindo,
10002
100
2010
2001
1000
100
010
001
nf
bt
rl
t
t
t
Tz
y
x
ort
Matriz de Translação em WebGL (ii)
72
No calculo da matriz de escalamento, fazemos com que as dimensões do objecto
satisfaçam as desigualdades:
11 x 11 y 10 z
(−1,−1,0)
𝑋
𝑌
−𝑍
(−1,1,0)
(1,1,1)(−1,1,1)
(1,−1,1)
(1,1,0)
(1, −1,0) (r,t,f)
(l,b,n)
𝑆𝑥 . 𝑟 − 𝑙 = 1 − −1 ⟶ 𝑆𝑥 =2
𝑟 − 𝑙
𝑆𝑦 . 𝑡 − 𝑏 = 1 − −1 ⟶ 𝑆𝑦 =2
𝑡 − 𝑏
𝑆𝑧 . 𝑓 − 𝑛 = 1 − 0 ⟶ 𝑆𝑧 =1
𝑓 − 𝑛
Matriz de Escalamento em WebGL (i)
𝒓 = −𝒍 𝒕 = −𝒃Nota: as restrições e
não são válidas !
73
Pelo que a matriz de escalamento é dada por
1000
02
00
002
0
0002
nf
bt
lr
Sort
Vindo finalmente para a matriz de projeção ortogonal
Nort = Sort . Tort =
1000
02
00
002
0
0002
nf
bt
lr
10002
100
2010
2001
nf
bt
lr
Matriz de Projeção Ortogonal em WebGL (ii)
74
Nort = Sort . Tort =
1000
02
00
002
0
0002
nf
bt
lr
10002
100
2010
2001
nf
bt
lr
𝐍𝐨𝐫𝐭 =
𝟐
𝒓 − 𝒍𝟎 𝟎 𝒕𝒙
𝟎𝟐
𝒕 − 𝒃𝟎 𝒕𝒚
𝟎 𝟎𝟐
𝒇 − 𝒏𝒕𝒛
𝟎 𝟎 𝟎 𝟏
𝑡𝑥 = −𝑟 + 𝑙
𝑟 − 𝑙
𝑡𝑦 = −𝑡 + 𝑏
𝑡 − 𝑏
𝑡𝑧 = −𝑓 + 𝑛
𝑓 − 𝑛
Matriz de Projeção Ortogonal em WebGL (iii)
75
Câmara Ortogonal em three.js
OrthographicCamera( left, right, top, bottom, near, far )
76
Matriz de Transformação Perspetiva
Admitindo o modelo de CVS a transformação de perspetiva é dada por:
Vamos demonstrar !
𝑵𝒑𝒆𝒓𝒔𝒑 =
𝒅
𝓵𝟎 𝟎 𝟎
𝟎𝒅
𝓪𝟎 𝟎
𝟎 𝟎𝒇
𝒇 − 𝒏
−𝒇. 𝒏
𝒇 − 𝒏𝟎 𝟎 𝟏 𝟎
77
𝑌𝑝 =𝑑
𝑍𝑣𝑌𝑣𝑋𝑝 =
𝑑
𝑍𝑣𝑋𝑣 𝑍𝑝 = 𝑑
𝑋𝑝𝑋𝑣
=𝑑
𝑍𝑣
𝑌𝑝𝑌𝑣
=𝑑
𝑍𝑣
Relação não linear. A divisão por z, reflete o “encurtamento”
Zv
Xv
Zv
Xp
Xv
Zv
Yv
Yp
Yv
dd
Projeção em Perspetiva Simples
78
Projeção em Perspetiva Simples (i)
A transformação de perspetiva é algo complexa, pois envolve deformação
de perspetiva (do frustum para o paralelepípedo).
Um modo de abordar este problema, é descrevê-lo como uma projeção
simples. Neste contexto, teremos a matriz:
𝑀𝑝𝑒𝑟𝑠𝑝_𝑆𝑖𝑚𝑝𝑙𝑒𝑠 =
𝑑 0 0 00 𝑑 0 00 0 𝑑 00 0 1 0
Esta configuração (em coord. homogéneas) permite obter
𝑤𝑋𝑝𝑤𝑌𝑝𝑤𝑍𝑝𝑤
= 𝑀𝑝𝑒𝑟𝑠𝑝_𝑆𝑖𝑚𝑝𝑙𝑒𝑠
𝑋𝑣𝑌𝑣𝑍𝑣1
=
𝑑𝑋𝑣𝑑𝑌𝑣𝑑𝑍𝑣𝑍𝑣
79
Projeção em Perspetiva Simples (ii)
(resultado anterior)
𝑤𝑋𝑝𝑤𝑌𝑝𝑤𝑍𝑝𝑤
= 𝑀𝑝𝑒𝑟𝑠𝑝_𝑆𝑖𝑚𝑝𝑙𝑒𝑠
𝑋𝑣𝑌𝑣𝑍𝑣1
=
𝑑𝑋𝑣𝑑𝑌𝑣𝑑𝑍𝑣𝑍𝑣
𝑋𝑝𝑌𝑝𝑍𝑝
=1
𝑍𝑣
𝑑𝑋𝑣𝑑𝑌𝑣𝑑𝑍𝑣
Aplicando a “divisão por perspetiva” obtém-se
Resultado já conhecido !
(*)
80
Transformação de Deformação
Perspetiva (i)
Lição:
Demonstrou-se que o uso de coordenadas homogéneas permite
realizar uma projeção em perspetiva simples
No entanto há uma limitação:
A projeção realizada é não invertível, ou seja, todos os pontos
ao longo de um raio projetor são mapeados no mesmo ponto
do plano de projeção.
Isto quer dizer, que não recuperamos a informação de
profundidade, ou seja, não contabilizamos os parâmetros
“near” e “far”.
81
Transformação de Deformação
Perspetiva (ii)
Para recuperar a informação de profundidade, faz-se a adaptação
𝑀𝑝𝑒𝑟𝑠𝑝_𝑆𝑖𝑚𝑝𝑙𝑒𝑠 =
𝑑 0 0 00 𝑑 0 00 0 𝑑 00 0 1 0
𝑀𝑝𝑒𝑟𝑠𝑝 =
𝑑 0 0 00 𝑑 0 00 0 𝑎 𝑏0 0 1 0
(*)
Multiplicando o vetor por ficamos com[ 𝑋𝑣 𝑌𝑣 𝑍𝑣 1]𝑇 𝑀𝑝𝑒𝑟𝑠𝑝
𝑑𝑋𝑣𝑑𝑌𝑣
𝑎𝑍𝑣 + 𝑏𝑍𝑣
e usando o resultado em 𝑋𝑝𝑌𝑝𝑍𝑝
=1
𝑍𝑣
𝑑𝑋𝑣𝑑𝑌𝑣
𝑎𝑍𝑣 + 𝑏
𝒁𝒑 = 𝒂 +𝒃
𝒁𝒗Ou seja conserva profundidade !
obtemos
82
Transformação de Deformação
Perspetiva (iii)
Para determinar os parâmetros “a” e “b”, recorremos às condições do
frustum genérico, ou seja, e
Quer isto dizer que, à igualdade impomos os valores
de near e far, isto é
𝑍𝑣 = 𝑛 𝑍𝑣 = 𝑓
𝑍𝑝 = 𝑎 +𝑏
𝑍𝑣
𝑛 = 𝑎 +𝑏
𝑛
𝑓 = 𝑎 +𝑏
𝑓
resolvendo o sist. de eq.
vai dar …
𝑎 = 𝑛 + 𝑓
𝑏 = −𝑛𝑓
𝑀𝑝𝑒𝑟𝑠𝑝 =
𝑑 0 0 00 𝑑 0 00 0 𝑎 𝑏0 0 1 0
Substituindo este último resultado na matriz, ficamos com
𝑀𝑝𝑒𝑟𝑠𝑝 =
𝑑 0 0 00 𝑑 0 00 0 𝑛 + 𝑓 −𝑛𝑓0 0 1 0
83
Matriz de Projeção Perspetiva
𝑑 0 0 00 𝑑 0 00 0 𝑛 + 𝑓 −𝑛𝑓0 0 1 0
𝑁𝑝𝑒𝑟𝑠𝑝 = 𝑁𝑜𝑟𝑡𝑜 𝑀𝑝𝑒𝑟𝑠𝑝
1
𝓁0 0 0
01
𝒶0 0
0 01
𝑓 − 𝑛
−𝑛
𝑓 − 𝑛0 0 0 1
A deformação de perspetiva (do frustum para o paralelepípedo)
é então dada por
𝑵𝒑𝒆𝒓𝒔𝒑 =
𝒅
𝓵𝟎 𝟎 𝟎
𝟎𝒅
𝓪𝟎 𝟎
𝟎 𝟎𝒇
𝒇 − 𝒏
−𝒇. 𝒏
𝒇 − 𝒏𝟎 𝟎 𝟏 𝟎
84
(comparar com a exp. (5.17) do livro, pag. 92)
(resultado do acetado 69, i.e.
a matriz de proj. ortogonal
no sistema CVS)
Matriz de Projeção Perspetiva em
OpenGL
𝑵𝒑𝒆𝒓𝒔𝒑 =
𝟐𝒅
𝒓 − 𝒍𝟎 𝑻𝒙 𝟎
𝟎𝟐𝒅
𝒕 − 𝒃𝑻𝒚 𝟎
𝟎 𝟎𝒇
𝒇 − 𝒏
−𝒇. 𝒏
𝒇 − 𝒏𝟎 𝟎 𝟏 𝟎
Exercicio 1:
Mostre (especificando os valores de Tx e Ty) que a matriz de projeção de
perspetiva é dada por (os planos de recorte são dados por
)
Exercicio 2:
Deduza a expressão da matriz de projeção ortogonal e de perspetiva
admintindo os planos de recorte são dados por
𝒙 = ±𝟏 𝒚 = ±𝟏 𝒛 = ±𝟏
85
𝒙 = ±𝟏 𝒚 = ±𝟏 𝒛 =0
Câmara Perspectiva em three.js
PerspectiveCamera( fov, aspect, near, far )
86
Vértices
Transfs. de
Modelação e
Visualização
Transformação
de Projecção
Divisão
Perspectiva
Mapeamento
Janela-Viewport
Coordenadas
do Mundo
Coordenadas
de Recorte
Coordenadas
do Dispositivo
Normalizadas
Coordenadas
da Câmara
Coordenadas
do
Dispositivo
VérticesWRC
(3D)
DC
(2D+1)
87
Vértices
Transfs. de
Modelação e
Visualização
Transformação
de Projecção
Divisão
Perspectiva
Mapeamento
Janela-Viewport
Coordenadas
do Mundo
Coordenadas
de Recorte
Coordenadas
do Dispositivo
Normalizadas
Coordenadas
da Câmara
Coordenadas
do
Dispositivo
VérticesWRC
(3D)
DC
(2D+1)
88
Mapeamento Janela-Viewport
89
Viewport versus Janelas
Janela Gráfica
Janela ou
Janela de Recorte
Viewport
90
Volume de Visualização
91
Mapeamento em
Coordenadas de Janela Gráfica
92
Visualização 2D
Matriz de Transformação Janela-Viewport
A matriz de transformação de viewport é dada por
Vamos demonstrar !
𝑀 =
𝑿𝒗𝒎𝒂𝒙 − 𝑿𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎
𝑿𝒗𝒎𝒂𝒙 + 𝑿𝒗𝒎𝒊𝒏
𝟐
𝟎𝒀𝒗𝒎𝒂𝒙 − 𝒀𝒗𝒎𝒊𝒏
𝟐𝟎
𝒀𝒗𝒎𝒂𝒙 + 𝒀𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
93
Visualização 2D
Transformação Janela-Viewport (i)
Objectivo:
Transformar a janela de visualização, em coordenadas do mundo,
para um volume delimitado pela área de viewport.
Porque é a área que delimita a transformação, quer isto dizer, que vamos
atuar em (x,y)
O que é que está mal …. ?
94
Visualização 2D
Transformação Janela-Viewport (ii)
Não esquecer que o volume de visualização é canónico, pelo que a janela de
visualização, está centrado nas coordenadas do mundo !
X
Y
95
Visualização 2D
Transformação Janela-Viewport (iii)
Passo 1: Convenção
Neste processo de transformação convenciona-se que as coordenadas (x,y)
do volume de visualização são transladadas para o 1º quadrante, ou seja
X
Y
(𝑋𝑚𝑎𝑥, 𝑌𝑚𝑎𝑥 )
X
Y(𝑋𝑚𝑎𝑥, 𝑌𝑚𝑎𝑥 )
(𝑋𝑚𝑖𝑛, 𝑌𝑚𝑖𝑛 )
(𝑋𝑚𝑖𝑛, 𝑌𝑚𝑖𝑛 )
Desloco o volume de visualização de modo que o seu vértice
coincida com a origem do referencial do mundo
(𝑋𝑚𝑖𝑛, 𝑌𝑚𝑖𝑛 )
Nota: Podemos “esquecer” a coordenada “z”, uma vez que a profundidade não é
tratada neste estágio do pipeline 96
𝑇1 =
1 0 0 +𝑋𝑚𝑖𝑛,
0 1 0 +𝑌𝑚𝑖𝑛,
0 0 1 00 0 0 1
=
𝟏 𝟎 𝟎 +𝟏𝟎 𝟏 𝟎 +𝟏𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
Quer isto dizer que a 1ª transformação a ser contabilizada é a translação dada por
Passo 2:
Visualização 2D
Transformação Janela-Viewport (iv)
Temos agora que “ajustar” o tamanho da janela de visualização, para
o tamanho da janela de viewport. Isto implica a existência de um escalamento
(volume canónico)
X
Y(𝑋𝑚𝑎𝑥, 𝑌𝑚𝑎𝑥 )
(𝑋𝑚𝑖𝑛, 𝑌𝑚𝑖𝑛 )
97
Quer isto dizer que a 2ª transformação a ser contabilizada é um escalamento
entre o tamanho da janela de visualização, caracterizado pelo parâmetros
, e o tamanho do viewport, caracterizado pelo
parâmetros , isto é
(𝑋𝑚𝑎𝑥, 𝑌𝑚𝑎𝑥 ) (𝑋𝑚𝑖𝑛, 𝑌𝑚𝑖𝑛 )
(𝑋𝑣,𝑚𝑎𝑥 𝑌𝑣,𝑚𝑎𝑥 )
Visualização 2D
Transformação Janela-Viewport (v)
𝑺 =
𝑿𝒗𝒎𝒂𝒙 −𝑿𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎 𝟎
𝟎𝒀𝒗𝒎𝒂𝒙 −𝒀𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎
𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
(𝑋𝑣,𝑚𝑖𝑛 𝑌𝑣,𝑚𝑖𝑛 )
𝑆𝑥 (𝑋𝑚𝑎𝑥 − 𝑋𝑚𝑖𝑛 ) = 𝑋𝑣 𝑚𝑎𝑥 − 𝑋𝑣 𝑚𝑖𝑛
𝑆𝑥 =𝑋𝑣𝑚𝑎𝑥 −𝑋𝑣𝑚𝑖𝑛
𝑋𝑚𝑎𝑥 −𝑋𝑚𝑖𝑛=
𝑋𝑣𝑚𝑎𝑥 −𝑋𝑣𝑚𝑖𝑛
2
logo
(não esquecer que o volume é canónico !)
𝑆𝑦 (𝑌𝑚𝑎𝑥 − 𝑌𝑚𝑖𝑛 ) = 𝑌𝑣 𝑚𝑎𝑥 − 𝑌𝑣 𝑚𝑖𝑛
𝑆𝑦 =𝑌𝑣𝑚𝑎𝑥 −𝑌𝑣𝑚𝑖𝑛
𝑌𝑚𝑎𝑥 −𝑌𝑚𝑖𝑛=
𝑌𝑣𝑚𝑎𝑥 −𝑌𝑣𝑚𝑖𝑛
2
98
Visualização 2D
Transformação Janela-Viewport (vi)
Passo 3:
Finalmente só teremos que posicionar a janela no offset do viewport,
que é dependente do parâmetro . Pelo que é necessário
efetuar uma translação com este valor. Isto é:
(𝑋𝑣,𝑚𝑖𝑛 𝑌𝑣,𝑚𝑖𝑛 )
𝑻𝟐 =
𝟏 𝟎 𝟎 𝑿𝒗𝒎𝒊𝒏
𝟎 𝟏 𝟎 𝒀𝒗𝒎𝒊𝒏
𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
99
Fazendo agora a junção dos passo1, passo2 e passo3, obtemos a
seguinte composição matricial:
𝑀 = 𝑇2 . 𝑆. 𝑇1 =
𝟏 𝟎 𝟎 𝑿𝒗𝒎𝒊𝒏
𝟎 𝟏 𝟎 𝒀𝒗𝒎𝒊𝒏
𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
𝑿𝒗 𝒎𝒂𝒙 −𝑿𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎 𝟎
𝟎𝒀𝒗𝒎𝒂𝒙 −𝒀𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎
𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
𝟏 𝟎 𝟎 𝟏𝟎 𝟏 𝟎 𝟏𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
𝑴 =
𝑿𝒗𝒎𝒂𝒙 − 𝑿𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎
𝑿𝒗𝒎𝒂𝒙 + 𝑿𝒗𝒎𝒊𝒏
𝟐
𝟎𝒀𝒗𝒎𝒂𝒙 − 𝒀𝒗𝒎𝒊𝒏
𝟐𝟎
𝒀𝒗𝒎𝒂𝒙 + 𝒀𝒗𝒎𝒊𝒏
𝟐𝟎 𝟎 𝟏 𝟎𝟎 𝟎 𝟎 𝟏
Visualização 2D
Transformação Janela-Viewport (vii)
100
(comparar com a exp. (5.20) do livro, pag. 94)
Vértices
Transfs. de
Modelação e
Visualização
Transformação
de Projecção
Divisão
Perspectiva
Mapeamento
Janela-Viewport
Coordenadas
do Mundo
Coordenadas
de Recorte
Coordenadas
do Dispositivo
Normalizadas
Coordenadas
da Câmara
Coordenadas
do
Dispositivo
VérticesWRC
(3D)
DC
(2D+1)
101
Próxima Aula
Modelos de Iluminação e Reflexão
102