visualização do opengl. simplificação da projeção cônica plano de projeção eye projeção...

Post on 16-Apr-2015

142 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Visualização do OpenGL

Simplificação da projeção cônica

plano de projeçãoeye

Projeção cônica

plano de projeção

direção de projeção

Projeção ortográfica

Problema do clipping

xe

ye

ze

P1P2

1

1

-n

1

n

n

-n2

n

1

1

-n

1

n

0

0

0

0

n

0

0

0

0

n+f

-1

0

0

nŸf

0

= =

n

0

0

0

0

n

0

0

0

0

n+f

-1

0

0

nŸf

0

1

1

n

1

=

n

n

n2+2nf

-n

-1

-1

-n-2f

1

=

xe

ye

ze

P’1

P’2

w

Clipping em coordenadas homogêneas

-1 xh/w 1 -1 yh/w 1 -1 zh/w 1

-1 x 1 -1 y 1 -1 z 1

x[left, right] y[bottom, top]z[near, far]

xd

yd

zd

111

-1-1-1

nearfarright

left

bottom

top

Clipping em coordenadas homogêneas

x[left, right]y

-1 xh/w 1

-1 1

x

xh/w 1

xh w , se w>0 xh w , se w>0

xh w , se w<0 xh w , se w<0

OpenGL Spec

Clipping em coordenadas homogêneas

x[left, right]y

-1 xh/w 1

-1 1

x

x

w

xh w

xh -w

xh w

xh -w

não serve!w < 0(ze>0)

1

0

0

-1

-1

0

0

-1

-xh -w = 0 -xh -w = 0

xh -w = 0 xh -w = 0

O

Equação de um plano

N=(A,B,C)

P=(x,y,z)

x

y

z

P0

N.P = N.(P0 + P) = N.P0 = d N.P = N.(P0 + P) = N.P0 = d

P

d = Ax + By + Cz d = Ax + By + Cz

d

N.P = Ax + By + Cz N.P = Ax + By + Cz

Ax + By + Cz +D = 0Ax + By + Cz +D = 0

(A, B, C) = NeD = -d = N.(-P0 )

(A, B, C) = NeD = -d = N.(-P0 )

(N.P = 0)

O

Distância de um ponto a um plano

N=(A,B,C)

P=(x,y,z)

Pp

x

y

z

P

N.P = Ax + By + Cz N.P = Ax + By + Cz

N.P = Ax + By + Cz+D N.P = Ax + By + Cz+D

N.P =N.(Pp +P ) N.P =N.(Pp +P )

N.P = d + N.P N.P = d + N.P

Interseção de reta com plano

P1

P2

x

y

z

d1 = | Ax1 + By1 + Cz1+D |

d1

d2

d2 = | Ax2 + By2 + Cz2+D | P

P =d1 P2 + d2 P1

d1 + d2

Cálculo das distâncias

/* ===================== Distance ======================**** This function computes and returns the distance between a** point and a plane. Normal points toward out.*/double Distance(double x, double y, double z, double w, int plane ){ switch( plane ) { case 0: return( -w - x ); case 1: return( -w + x ); case 2: return( -w - y ); case 3: return( -w + y ); case 4: return( -w - z ); case 5: return( -w + z ); } return( 0.0 );}

Transformação para o Viewport

xd

yd

zd

111

-1-1-1

xw

yw

w

h

xw = x0 + w*(xd -(-1)) / 2yw = y0 +h*(yd -(-1)) / 2

zw = zd / 2 + 1/2

xw = x0 + w*(xd -(-1)) / 2yw = y0 +h*(yd -(-1)) / 2

zw = zd / 2 + 1/2

0

void glViewport(GLint x0, GLint y0, GLsizei width, GLsizei height );

zw[0..1]

Transformações de um vértice

OpenGL Spec

Modelo do Pintor

prof

undidad

e

z

Problemas na ordenação de faces

+ +

zazb

(a)

(b)

BSP trees: Binary Space Partion Trees

1

23

4

5a5b

3

12

5a

45b

atrásfrente

1

23

4

5a5b

3

45b

atrásfrente

2frente atrás

5a 1

1

23

4

5a5b

3

2

5a 1

4

5b

Exibição de uma BSP

void bspDisplay(bspTree *tree){ if (arvore não é vazia) { if (observador está a frente da raiz) { bspDisplay(treebackChild); DisplayPolygon(treeroot); bspDisplay(treefrontChild); } else { bspDisplay(treefrontChild); DisplayPolygon(treeroot); bspDisplay(treebackChild); } }}

Mostra a árvore detrás, a raiz e a árvoreda frente.

Mostra a árvore dafrente, a raiz e a árvorede atrás.

BSP trees: Dois exemplos de exibição

1

23

4

5a5b

3

2

5a 1

4

5b

5a, 2, 1, 3, 5b, 45a, 2, 1, 3, 5b, 4

1

23

4

5a5b

3

2

5a 1

4

5b

4, 5b, 3, 5a, 2, 14, 5b, 3, 5a, 2, 1

ZBuffer: idéia básica

z

MATRIZ DEPROFUNDIDADES

Rasterização de Polígonos e Linhas

ZBuffer - pseudo-código

void ZBuffer( void){ int x,y;

for (x=0; x<w; x++) { for (y=0;y<h; y++) { WritePixel(x,y, bck_color); WriteZ(x,y,0); } }

for (each primitive) { for (each pixel in the projected primitive) { double pz = z coordinate of the (x,y) pixel; if (pz <= ReadZ(x,y)) { WritePixel(x,y, color); WriteZ(x,y,pz); } } }

} /* Zbuffer */void glEnable( GL_DEPTH_TEST );void glEnable( GL_DEPTH_TEST );

Interpolação de cores

void glShadeModel (GL_SMOOTH);void glShadeModel (GL_SMOOTH);

void glShadeModel (GL_FLAT);void glShadeModel (GL_FLAT);

Suavização da tonalização

c1 c4

c2

c3

c12 c43c

N1 N4

N2

N3

N12 N43

c

GouraudPhong

N

top related