projecções e visualização 3d

32
Projeções e Visualização Computação Gráfica 5385: Licenciatura em Engenharia Informática Cap. 4 — Projeções e Visualização

Upload: lytuong

Post on 08-Dec-2016

216 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Projecções e Visualização 3D

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

Cap. 4: Projeções e Visualização

Sumário

Page 3: Projecções e Visualização 3D

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

Cap. 4: Projeções e Visualização Como se processa cenas 3D ���no pipeline gráfico?

Page 5: Projecções e Visualização 3D

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

Cap. 4: Projeções e Visualização

Câmara clássica

Page 7: Projecções e Visualização 3D

Cap. 4: Projeções e Visualização

Câmara de lente dupla de Gauss

Page 8: Projecções e Visualização 3D

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cap. 4: Projeções e Visualização

Câmara móvel em 3D

Page 25: Projecções e Visualização 3D

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

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

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

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

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

Cap. 4: Projeções e Visualização

Page 31: Projecções e Visualização 3D

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

Cap. 4: Projeções e Visualização

Sumário: