Você está na página 1de 7

Visualização 3D

Recorte 3D

Projeção paralela ortográfica Projeção perspectiva

• Determina um paralelepípedo: • Determina um tronco de pirâmide:


– glOrtho ( xmin, xmax, ymin, ymax, near, far) glFrustum (xmin, xmax, ymin, ymax, near, far)

Y Z Y Z

ymax far (xmax, ymax)


SRC
(xmin, ymin)
near far
ymin SRC near
xmin

xmax
X X
Projeção perspectiva Como obter xmin, xmax, ymin, ymax

• Determina um tronco de pirâmide:


gluPerspective ( fovy, aspect, near, far )
Y Z

Y
SRC
near far
fovy
Y aspect = w/h ymax
Z X tan (fovy/2) = ymax/near
fovy/2
near fovy/2 Z
ymin
h
w far
SRC near ymax = near . tan (fovy/2)
fovy ymin = - (near . tan (fovy/2))
aspect = w/h

Pipeline de visualização 3D Pipeline de visualização 3D

• Complexidade: • Possibilidade
– recorte de elementos geométricos contra um volume – Solução híbrida 3D e 2D
qualquer
3D
descrição transformações recorte em
geométrica geométricas e de profundidade
descrição transformação câmera projeção
geométrica recorte
de câmera
2D
projeção recorte contra
a window
imagem exibição mapeamento
imagem exibição mapeamento
Recorte em duas etapas Recorte em duas etapas

z z
far • Recorte contra far • Recorte contra
planos planos
– Near – Near
– Far – Far
– ZNear < Zponto < ZFar – ZNear < Zponto < ZFar
• Recorte de linhas? • Recorte contra
• Trivial window
near near
• Recorte de – após a projeção
polígonos? – Algoritmos já
x x
estudados
SRC SRC • Cohen&Sutherland, ...

Pipeline de visualização 3D Transformação de normalização

• Transformação para um espaço normalizado • Três casos


– Volume de visualização projeção ortográfica
– Volume para projeção oblíqua
3D • Ambos são transformados para o volume canônico (cubo)
descrição transformações
transformação de
recorte contra
geométrica geométricas e de volume canônico
normalização (1,1,-1) Recorte é, então, realizado
câmera
contra os planos limitantes
do cubo.
(-1,-1,1)
projeção
imagem exibição mapeamento
Transformação de normalização Pipeline de visualização 3D

• Três casos
– Volume de visualização projeção ortográfica Coordenadas Objeto
– Volume para projeção oblíqua
Matriz Modelagem
– Volume de visualização projeção perspectiva
Coordenadas Mundo
• Tronco de pirâmide | volume canônico
Matriz Projeção
Coordenadas Recorte

(1,1,1) Perspectiva
Recorte é, então, realizado
contra os planos limitantes Coordenadas Normalizadas
do volume canônico.
(-1,-1,-1) Matriz Tela
SRU
Coordenadas Tela

Transformações de visualização em OpenGL Transformação para volume canônico - projeção ortográfica

xo xc xr
yo modelview yc projection yr (xmax,ymax,zmax)
zo matrix zc matrix zr
wo wc wr • Translação (T)
– o ponto central do volume de
SRO SRC coordenadas visualização deve ser levado
p/recorte para a origem
(xmin,ymin,zmin)
Dx = - (xmax + xmin) / 2
xr/ wr (1,1,1) Dy = - (ymax + ymin) / 2
xt
divisão yr/ wr transformação Dz = - (zmax + zmin) / 2
yt
perspectiva zr / w r p/viewport – Isto é necessário porque, não
zt obrigatoriamente xmin e xmax,
1 (-1,-1,-1)
ymin e ymax são centrados na
SRNormalizado SRT origem!
Transformação para volume canônico - projeção ortográfica Transformação para volume canônico - projeção ortográfica

(xmax,ymax,zmax) • Volume canônico


• Origem deve ser (0,0,0)
(xmax,ymax,zmin)
• Lado deve ter tamanho 2
• zmin = -near, zmax = -far
• Escala (S) • Matriz composta
(xmin,ymin,zmin)
– o volume canônico tem
dimensões 2x2x2
(xmin,ymin,zmax) Sx = 2 / (xmax - xmin)
2 xmax+xmin
Sy = 2 / (ymax - ymin) xmax-xmin
0 0 - xmax-xmin
(1,1,1)
Sz = 2 / (zmax - zmin) (1,1,1) 2 ymax+ymin
0
ymax-ymin
0 - ymax-ymin
• Volume canônico -2 zmax+zmin
0 0
zmax-zmin - zmax-zmin
(-1,-1,-1) P’= S.T.P (-1,-1,-1)
0 0 0 1

Transformação para volume canônico - projeção perspectiva Mantendo a coordenada z entre -1 e 1

far P2
P1
Y Z

P’
near SRC
near far
(xmin,ymin,near) (xmax,ymax,near) z1 = - near, z* = -1
X z1 = - far, z* = 1
eye
x y a . z1 + b
Z=1 P’= (near -z1 , near -z1 ) -z1 a=
- (far+near)
1 1
far-near
X = -1 X=1
- 2 far*near
• Representando essa b=
far-near
Z = -1
transformação na
matriz
Transformação para volume canônico – projeção perspectiva Transformação para volume canônico – projeção perspectiva

• Transformação perspectiva, mantendo coordenada z • O volume deformado precisa ser transformado


em canônico

near 0 0 0
x’ = near . x near 0 0 0 x
0 near 0 0
y’ = near . y 0 near 0 0 y Escala para lado 2 Translação para a origem
= Sx = 2 / (xmax - xmin) Dx = - (xmax + xmin) / 2 -(far+near) - 2 far*near
0 0
-(far+near) - 2 far*near Sy = 2 / (ymax - ymin) Dy = - (ymax + ymin) / 2 far-near far-near
z’ = a.z + b 0 0 z
far-near far-near
0 0 -1 0
w = -z 0 0 -1 0 1

Transformação para volume canônico – projeção perspectiva Transformação de projeção em OpenGL

xo xc xr
plano z=far • Matriz composta, yo modelview projection
yc yr
incluindo o zo matrix zc matrix zr
(xmax,ymax,near)
cisalhamento wo wc wr
(xmin,ymin,near) 2 near
0
xmax+xmin
0 SRO SRC coordenadas
xmax-xmin xmax-xmin
2 near ymax+ymin
p/recorte
0 0
ymax-ymin ymax-ymin
(1,1,1) - 2 far*near
0 0
-(far+near) xr/ wr xt
far-near far-near transformação
divisão yr/ wr yt
0 0 -1 0 perspectiva zr / w r p/viewport
(-1,-1,-1) zt
1
SRNormalizado SRT
Recorte 3D Recorte 3D em coordenadas homogêneas

• Um ponto transformado tem coordenadas (X,Y,Z,W)


• Estender Cohen- • Este ponto está dentro do volume canônico se
Sutherland para 3D -1 ≤ X/W ≤ 1
-1 ≤ Y/W ≤ 1 (1,1,1)
• Facilitado pela -1 ≤ Z/W ≤ 1

representação em • Recorte em coordenadas homogêneas


(1,1,1) – São visíveis os pontos que
coordenadas homogêneas -W ≤ X ≤ W, para W > 0
(-1,-1,-1)
-W ≤ Y ≤ W, para W > 0
-W ≤ Z ≤ W, para W > 0
(-1,-1,-1)
• Genericamente, se o volume é (xmin,ymin, zmin) e
(xmax, ymax, zmax):
-W.xmin ≤ X ≤ W.xmax, para W < 0
-W.ymin ≤ Y ≤ W.ymax, para W < 0
-W.zmin ≤ Z ≤ W.zmax, para W < 0

Você também pode gostar