Pipeline de Visualização Câmara Virtual · Definir planos de recorte • paralelos ao plano de...

Preview:

Citation preview

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

CDP

Raios

Projectores

Plano de

Projecção

• Determinada por direcção de projecção

• Os raios projectores paralelos entre si

A

B

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

Recommended