professor: computação gráfica i anselmo montenegro...

25
Instituto de Computação - UFF 1 Computação Gráfica I Professor : Anselmo Montenegro www.ic.uff.br/~anselmo Conteúdo : - Algoritmos para rastreio (scan-conversion).

Upload: hathuy

Post on 05-Dec-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 1

Computação Gráfica I Professor:

Anselmo Montenegro www.ic.uff.br/~anselmo

Conteúdo:

- Algoritmos para rastreio (scan-conversion).

Page 2: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 2

Algoritmos para rastreio: introdução

Page 3: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 3

ponto: (3,2) tamanho 1 sem anti-alias ponto: (3,3) tamanho 3 sem anti-alias

⎣ ⎦⎣ ⎦ ⎟⎟

⎞⎜⎜⎝

+

+=⎟⎟⎠

⎞⎜⎜⎝

2121

w

w

yx

yx

OpenGL Spec

0.5 1.5 2.5 3.5 4.5 5.5

0.5

1.5

2.5

3.5

4.5

5.5 w=6 e h=5

0 1 2 3 4 5

0

1

2

3

4

xw

yw

Algoritmos para rastreio: Coordenadas de um ponto na janela (windows coordinate)

l  As coordenadas do centro de um ponto de tamanho impar são:

Page 4: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 4

0 1 2 3 4 5

0

1

2

3

4

linha: (0,0),(4,0) linha: (5,1),(5,4) linha: (0,2),(3,5)

l  Casos triviais em que as linhas passam pelo centro das células.

Algoritmos para rastreio: critério geométrico para linhas horizontais, verticais e à 45°

Page 5: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 5

linha: (0,0),(5,2)

0 1 2 3 4 5

0

1

2

3

0 1 2 3 4 5

0

1

2

3

x dominante L ⇒−≥− 1212 yyxx x dominante, um pixel por coluna

⇒−<− 1212 yyxx y dominante, um pixel por linha

Algoritmos para rastreio: critério geométrico de Bresenham (1965) para linhas

Page 6: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 6

#define ROUND(x) (int)floor((x)+0.5) void linha(int x1, int y1, int x2, int y2) { float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y; fragmento(x1,y1); while( x1 < x2 ) { x1++; y = m*x1 + b; fragmento(x1,ROUND(y)); } }

bmxy ii +=⎪⎩

⎪⎨

−=

−=

11

12

12

mxybxxyym

Podemos evitar a

multiplicação?

0 1 2 3 4 5

0

1

2

3

(x1,y1)

(x2,y2)

Algoritmos para rastreio: algoritmo simples para o primeior octante

Page 7: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 7

void linha(int x1, int y1, int x2, int y2) { float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y=y1; pixel(x1,y1); while( x1 < x2 ) { x1++; y += m; fragmento(x1,ROUND(y)); } }

bmxy ii +=

⎪⎩

⎪⎨

−=

−=

11

12

12

mxybxxyym

( ) bxmy ii ++=+ 11

bmxy ii +=

myy ii =−+1

Podemos evitar o uso de ponto flutuante?

(x1,y1)

(x2,y2)

Algoritmos para rastreio: algoritmo simples para o primeior octante – forma incremental

Page 8: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 8

⎟⎟⎠

⎞⎜⎜⎝

−−+⎟⎟

⎞⎜⎜⎝

−= 1

12

121

12

12 xxxyyyx

xxyyy

cybxayxF ++= ..),(

( ) ( ) ( ) ( )( )1121121212 xyyyxxxyyyxx −−−+−=−

( ) ( ) ( ) ( )( ) 01121122112 =−−−+−+− xyyyxxyxxxyy

x1 x2

y1

y2

x

y

⎟⎟⎠

⎞⎜⎜⎝

−=

21

12

xxyy

nF x y( , ) > 0

F x y( , ) < 0 bmxy ii +=⎪⎩

⎪⎨

−=

−=

11

12

12

mxybxxyym

Algoritmos para rastreio: equação implícita da reta

Page 9: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 9

cybxayxF ++= ..),(

e

ne

xp

yp

m

0),( <mm yxF

xp+1 xp+2

yp+1/2

yp+1

yp+2

me e

ne

e

ne

xp xp+1 xp+2 yp

m yp+1/2

yp+1

yp+2 mne

e

ne

0),( >mm yxF

Algoritmos para rastreio: equação básica do algoritmo do ponto médio para linhas

Page 10: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 10

),(2),( yxFyxd =

⎩⎨⎧

→≤

→>==

ene

mmescolhaescolha

Fd00

)(2)(

e cybxayxFd ppppnovo 2)(2)2(2),2(2 2

121 ++++=++=

add antnovo 2+=

cybxayxFd ppppnovo 2)(2)2(2),2(2 23

23 ++++=++=

badd antnovo 22 ++=ne

ae 2=Δ

bane 22 +=Δ

e

ne

xp xp+1 xp+2 yp

m yp+1/2

yp+3/2 mne

me

bacybxayxFdini +=++++=++= 22)(2)1(2),1(2 21

0021

00

bad ini += .2

( )baa

ne

e

+=Δ

22

Algoritmos para rastreio: algoritmo do ponto médio - versão para aritmética inteira

Page 11: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 11

void linhaPM(int x1, int y1, int x2, int y2) { int a = y2-y1; int b = x1-x2; int d=2*a+b; /* valor inicial da var. decisao */ int incrE = 2*a; /* incremento p/ mover E */ int incrNE = 2*(a+b); /* incremento p/ mover NE */ fragmento(x1,y1); while (x1<x2) { x1++; if (d<=0) /* escolha E */ d+=incrE; else { /* escolha NE */ d+=incrNE; y1++; } fragmento(x1,y1); } }

Algoritmos para rastreio: algoritmo do ponto médio para linhas – código em C

Page 12: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 12

void linhaPM(int x1, int y1, int x2, int y2) { int a = y2-y1; int b = x1-x2; int d=2*a+b; /* valor inicial da var. decisao */ int incrE = 2*a; /* incremento p/ mover E */ int incrNE = 2*(a+b); /* incremento p/ mover NE */ int style[8]={1,1,0,0,1,1,0,0}; int k=1; fragmento(x1,y1); /* primeiro pixel */ while (x1<x2) { x1++; if (d<=0) /* escolha E */ d+=incrE; else { /* escolha NE */ d+=incrNE; y1++; } if (style[(++k)%8]==1) fragmento(x1,y1); } }

Algoritmos para rastreio: algoritmo do ponto médio para linhas com estilo – código em C

Page 13: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 13

∇ =

⎜⎜⎜⎜

⎟⎟⎟⎟

F

FxFy

∂∂∂∂

x

F(x,y) = 0

45o

y

l  Segundo o critério de Bresenham se a curva está mais próxima da horizontal tomamos um ponto por coluna caso contrário tomamos um ponto por linha.

l  O ponto de transição é o que possui gradiente na direção dada pelo ângulo de 45 graus.

Algoritmos para rastreio: rastreio para elipses – critério de Bresenham

Page 14: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 14

l  O critério do ponto médio é aplicado de forma semelhante ao aplicado para linhas.

l  A diferença principal é que F(x,y) é quadrática. l  Para implementar o algoritmo eficazmente é

necessário calcular incrementos dos incrementos de y quando x é acrescido de 1.

Algoritmos para rastreio: rastreio para elipses

Page 15: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 15

l  A figura abaixo ilustra a porção do primeiro quadrante no qual a curva é x dominante. Neste caso as escolhas são e e se.

l  A partir do ponto de transição a curva é y dominante e as escolhas são s e se.

e

se m me

mse

F(x,y) = 0

Algoritmos para rastreio: rastreio para elipses

Page 16: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 16

l  O rastreio de um círculo é um caso particular do rastreio de uma elipse.

l  Trabalhamos com o segundo octante, no qual a curva é x dominante.

l  Utilizamos a simetria do círculo para definir os pontos nos demais octantes.

Algoritmos para rastreio: rastreio de círculos

Page 17: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 17

x=0,y=raio; fragmento(x,y); while (x<y) { x++; if (F(M)<0) escolha E; else escolha SE; fragmento(E ou SE); }

x

y

cada ponto calculado define 8 pixels

e

se m me

mse

F(x,y) = 0

x

y

45o

x = y

Algoritmos para rastreio: rastreio de círculos

Page 18: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 18

Algoritmos para rastreio: rastreio de polígonos

Page 19: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 19

0 2

1

1

0

1

3

6

1

Algoritmos para rastreio: rastreio de polígonos – noção de interior para um polígono qualquer

Page 20: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 20

y

ys

x

0

1

2

3

4

0 xi4

ymax

ymin

dados: {(x0,y0), (x1,y1), (x2,y2) (x3,y3), (x4,y4)}

Achar ymax e ymin Para cada y ∈[ymax,ymin] Para cada aresta calcular as interseções ordenar interseções desenhar linhas horizontais

vx= {xi1 , xi0 , xi4 , xi3}

i0 i1 i3 i4

xi1 xi0 xi3

Algoritmos para rastreio: preenchimento de polígonos

Page 21: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 21

inclui vértices: i0-i1, i2-i3, i4-?

não inclui vértices: i0-?

x

y

ys

5 0

1

2 4

i0 i2 i3

0

i1 i4

3 x

y

ys

5 0

1

2 4

i0 i2 i3

0

i1 i4

3 x

y

ys

5 0

1

2 4

i0 i2 i3

0

i1 i4

3

L L

Solução:

x

y

ys

5 0

1

2 4

i0

0

i4

3

ou

x

y

ys

5 0

1

2 4

i0 i2 i3

0

i1

3

Algoritmos para rastreio: interseção nos vértices

Page 22: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 22

…,2,, 000 dxxdxxx ++

Interpolação linear na aresta

ys+1 dy = 1

01

01

yyxxdx

−=

x

y

y0

y1

ys

x1 x0 0 xi xi+1

…,2,, 000 dccdccc ++

Algoritmos para rastreio: otimização do algoritmo de preenchimento – interpolação linear

Page 23: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 23

0 1

2

3

4

5

6 B

C

a

b

c

x

y A

Algoritmos para rastreio: otimização do algoritmo de preenchimento – triângulos

Page 24: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 24

))(())(( ABACACAB yyxxyyxxbc −−−−−=×

B

C a

b

c

x

y A

0>×bc x

y

B

C a

b

c

A

0<×bc

Algoritmos para rastreio: possíveis configurações para um triângulo yA≥ yB ≥ yC

Page 25: Professor: Computação Gráfica I Anselmo Montenegro …anselmo/cursos/CGI/slidesGrad/CG_aula7(rastreio).pdf · Instituto de Computação - UFF 1 Computação Gráfica I Professor:

Instituto de Computação - UFF 25

B

C

a

b

c

x

y A

yC

yA

yB

xa xb

ys

B

C a

b

c

x

y A

yC

yA

yB

xc xb

ys

Algoritmos para rastreio: rastreio de um triângulo