Projecções e Visualização 3D
Transcript of Projecções e Visualização 3D
![Page 1: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/1.jpg)
Projeções e Visualização
Computação Gráfica
5385: Licenciatura em Engenharia Informática
Cap. 4 — Projeções e Visualização
![Page 2: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/2.jpg)
Cap. 4: Projeções e Visualização
Sumário
![Page 3: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/3.jpg)
Cap. 4: Projeções e Visualização
Pipeline de Visualização em OpenGL®
MODELVIEW matrix
PROJECTION matrix
perspective division
viewport transformation
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
wzyx
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
eye
eye
eye
eye
wzyx
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
1dev
dev
yx
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
proj
proj
proj
wyx
⎥⎦
⎤⎢⎣
⎡
win
win
yx
vértice original
vértice no sistema de coordenadas
do olho
projecção 2D do vértice no
plano de projecção
coordenadas normalizadas do dispositivo
de saída (foreshortened)
coordenadas do pixel no
visor da janela de desktop
![Page 4: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/4.jpg)
Cap. 4: Projeções e Visualização Como se processa cenas 3D ���no pipeline gráfico?
![Page 5: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/5.jpg)
Cap. 4: Projeções e Visualização
Tipos de câmara
Antes de gerar uma imagem temos que escolher o observador (ou câmara).
![Page 6: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/6.jpg)
Cap. 4: Projeções e Visualização
Câmara clássica
![Page 7: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/7.jpg)
Cap. 4: Projeções e Visualização
Câmara de lente dupla de Gauss
![Page 8: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/8.jpg)
Cap. 4: Projeções e Visualização
Câmara foto-realística
Adaptação
Glare & Difracção
![Page 9: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/9.jpg)
Cap. 4: Projeções e Visualização
Renderização de cenas 3D em OpenGL®
9
glMatrixMode(GL_MODELVIEW) ...
glMatrixMode(GL_PROJECTION) ...
glViewport(0,0,xres,yres)
sistema de coordenadas da câmara
sistema de coordenadas da janela 2D
sistema de coordenadas do dispositivo/ecrã
Veja-se slide 3 para comparação!
![Page 10: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/10.jpg)
Cap. 4: Projeções e Visualização Renderização de cenas 3D em OpenGL®: da geometria à imagem
http
://w
ww
.son
gho.
ca/o
peng
l/gl_
tran
sfor
m.h
tml
![Page 11: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/11.jpg)
Cap. 4: Projeções e Visualização
Tipos de projeção 3D2D
3-pontos
Projecção
Perspectiva Paralela
2-pontos
Oblíqua
Axonométrica
Ortogonal 1-ponto
![Page 12: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/12.jpg)
Cap. 4: Projeções e Visualização
Projeções paralelas
− O observador no infinito. − As projectantes são paralelas.
axonométrica oblíqua ortogonal
![Page 13: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/13.jpg)
Cap. 4: Projeções e Visualização
Matriz de projeção paralela ortogonal
− A mais simples de todas as projeções: as projetantes são perpendiculares ao plano de projeção. − Normalmente, o plano de projeção está alinhado com os eixos (muitas das vezes em z=0). − As projeções paralelas ortogonais também são designadas por vistas (em desenho técnico).
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
==⇒
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
→
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
1000000000100001
where
10
1
MMPPyx
zyx
![Page 14: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/14.jpg)
Cap. 4: Projeções e Visualização
Projeções paralelas ortogonais em OpenGL®
glOrtho(xmin, xmax, ymin, ymax, zmin, zmax);
![Page 15: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/15.jpg)
Cap. 4: Projeções e Visualização Várias projeções em vários visores:���exemplo
perspectiva
alçado lateral esquerdo
vista de frente
planta
− Obtêm-se através do reposicionamento da câmara. − Em alternativa, obtêm-se através do reposicionamento do/a objecto/cena.
![Page 16: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/16.jpg)
Cap. 4: Projeções e Visualização Projeções paralelas axonométricas: ���isométrica, dimétrica e cavaleira − Se o objecto está alinhado com os eixos, o resultado é uma projecção ortogonal; − Caso contrário, é uma projecção axonométrica. − Se o plano de projecção intersecta os eixos XYZ à mesma distância relativamente à origem, o resultado é uma projecção isométrica.
1=++ zyx
![Page 17: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/17.jpg)
Cap. 4: Projeções e Visualização
Projeções em perspectiva
− O observador está a uma distância finita do/a objeto/cena. − As projetantes não são paralelas e convergem para um ou mais pontos (observadores).
perspectiva com 1-ponto perspectiva com 2-pontos perspectiva com 3-pontos
![Page 18: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/18.jpg)
Cap. 4: Projeções e Visualização Projeções em perspectiva���com um observador
− O observador está a uma distância finita do/a objeto/cena. − As projetantes or raios visuais convergem para um ponto (observador), designado por COP. − Em OpenGL, só se usa um observador.
![Page 19: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/19.jpg)
Cap. 4: Projeções e Visualização
y
-z
d
y’
Matriz de projeção em perspetiva���com um observador
− Considere uma projeção em perspetiva com o ponto de vista na origem e a direção de observação orientada ao longo do eixo -z, com o plano de projeção localizado em z = -d.
€
y−z
=y 'd⇒ y'= y
−z /d€
x−z
=x 'd⇒ x'= x
−z /d
€
x '= −xdz
=x
−z /d
y '= y−z /d
z'= −d
⎧
⎨
⎪ ⎪ ⎪
⎩
⎪ ⎪ ⎪
x 'y 'z'1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
x−z /dy
−z /d−d1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥ ⎥
⇔
xyz
−z /d
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
1 0 0 00 1 0 00 0 1 00 0 −1/d 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
xyz1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
d
y’
y
PROJECTION matrix
perspective division
![Page 20: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/20.jpg)
Cap. 4: Projeções e Visualização Projeção em perspetiva com um observador ���em OpenGL®
− Por via de glFrustrum:
glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);
frustum = pirâmide truncada do campo de vista
![Page 21: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/21.jpg)
Cap. 4: Projeções e Visualização Projeção em perspetiva com um observador ���em OpenGL® (cont.)
− Por via de glFrustrum:
glFrustrum(-1.0, 1.0, -1.0, 2.0, 5.0, 50.0);
![Page 22: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/22.jpg)
Cap. 4: Projeções e Visualização Projeção em perspetiva com um observador ���em OpenGL® (cont.)
− Por via de gluPerspective:
2tan2
2tan2 θθ nearh
nearh
=⇒=
gluPerspective(fov, aspect, near, far);
![Page 23: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/23.jpg)
Cap. 4: Projeções e Visualização Projeção em perspetiva com um observador ���em OpenGL® (cont.)
− Por via de gluPerspective:
gluPerspective(60, 1.0, 1.0, 50.0);
![Page 24: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/24.jpg)
Cap. 4: Projeções e Visualização
Câmara móvel em 3D
![Page 25: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/25.jpg)
Cap. 4: Projeções e Visualização Câmara móvel em 3D���com a utilização de OpenGL®
− Por via de gluLookAt:
gluLookAt(eyex, eyey, eyez, lookx, looky, lookz, upx, upy, upz);
glTranslatef(-eyex, -eyey, -eyez); glRotatef(theta, 1.0, 0.0, 0.0); glRotatef(phi, 0.0, 1.0, 0.0);
equivalente a:
Φ
Θ
![Page 26: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/26.jpg)
Cap. 4: Projeções e Visualização
Janela de projeção
(l,b,-n)
(r,t,-n)
(w,h,-n)
(-w,-h,-n)
€
h = n.tan f2⎛
⎝ ⎜
⎞
⎠ ⎟
w = h.a
− A partir do momento que se efectua a projeção da cena 3D na janela do plano de projeção, a renderização processa-se de forma idêntica ao 2D.
![Page 27: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/27.jpg)
Cap. 4: Projeções e Visualização Transformação janela-visor:���revisão − A partir do momento que se efetua a projeção da cena 3D na janela do plano de projeção, a renderização processa-se de forma idêntica ao 2D. − De facto, é preciso mapear os pontos da janela de projeção para os pixéis do visor da janela da interface, por forma a determinar o pixel associado a cada vértice dos objectos da cena 3D.
coordenadas do dispositivo normalizado
coordenadas do visor da janela da interface
![Page 28: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/28.jpg)
Cap. 4: Projeções e Visualização Transformação janela-visor:���revisão (cont.)
€
xn = 2xp − xminxmax − xmin
⎛
⎝ ⎜
⎞
⎠ ⎟ −1
yn = 2yp − yminymax − ymin
⎛
⎝ ⎜
⎞
⎠ ⎟ −1
static void reshape(int width, int height) {
glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(85.0, 1.0, 5, 50);
}
€
xv = xn +1( ) width2
⎛
⎝ ⎜
⎞
⎠ ⎟ + left
yv = yn +1( ) height2
⎛
⎝ ⎜
⎞
⎠ ⎟ + bottom
![Page 29: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/29.jpg)
Cap. 4: Projeções e Visualização Razão de aspeto:���revisão
aspect ratio = 1.25 aspect ratio = 0.5
![Page 30: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/30.jpg)
Cap. 4: Projeções e Visualização
![Page 31: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/31.jpg)
Cap. 4: Projeções e Visualização Exemplo:���bule de chá com quatro vistas
void display(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
// top left: top view glViewport(0, Height/2, Width/2, Height/2); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-3.0, 3.0, -3.0, 3.0, 1.0, 50.0); gluLookAt(0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); teapot();. . . // bottom right: rotating perspective view glViewport(Width/2, 0, Width/2, Height/2); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70.0, 1.0, 1, 50); gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(45.0, 1.0, 0.0, 0.0); teapot();
glPopMatrix();
glutSwapBuffers();}
31
− Veja-se o programa completo na página web da disciplina (teapot.zip).
![Page 32: Projecções e Visualização 3D](https://reader031.fdocument.pub/reader031/viewer/2022030319/58494ced1a28aba93a8d2445/html5/thumbnails/32.jpg)
Cap. 4: Projeções e Visualização
Sumário: