A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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).

Apresentações semelhantes


Apresentação em tema: "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)."— Transcrição da apresentação:

1 Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro Conteúdo: - Algoritmos para rastreio (scan-conversion).

2 Instituto de Computação - UFF 2 Algoritmos para rastreio: introdução

3 Instituto de Computação - UFF 3 ponto: (3,2) tamanho 1 sem anti-alias ponto: (3,3) tamanho 3 sem anti-alias OpenGL Spec w=6 e h= xwxwxwxw ywywywyw Algoritmos para rastreio: Coordenadas de um ponto na janela (windows coordinate) As coordenadas do centro de um ponto de tamanho impar são: As coordenadas do centro de um ponto de tamanho impar são:

4 Instituto de Computação - UFF linha: (0,0),(4,0) linha: (5,1),(5,4) linha: (0,2),(3,5) Casos triviais em que as linhas passam pelo centro das células. 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°

5 Instituto de Computação - UFF 5 linha: (0,0),(5,2) x dominante x dominante, um pixel por coluna y dominante, um pixel por linha Algoritmos para rastreio: critério geométrico de Bresenham (1965) para linhas

6 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)); } Podemos evitar a multiplicação? (x 1,y 1 ) (x 2,y 2 ) Algoritmos para rastreio: algoritmo simples para o primeior octante

7 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)); } 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)); } Podemos evitar o uso de ponto flutuante? (x 1,y 1 ) (x 2,y 2 ) Algoritmos para rastreio: algoritmo simples para o primeior octante – forma incremental

8 Instituto de Computação - UFF 8 x1x1x1x1 x2x2x2x2 y1y1y1y1 y2y2y2y2 x y Algoritmos para rastreio: equação implícita da reta

9 Instituto de Computação - UFF 9 e ne xpxpxpxp ypypypyp m xp+1xp+1xp+1xp+1 xp+2xp+2xp+2xp+2 y p +1/2 yp+1yp+1yp+1yp+1 yp+2yp+2yp+2yp+2 memememe e ne e ne xpxpxpxp xp+1xp+1xp+1xp+1 xp+2xp+2xp+2xp+2 ypypypyp m yp+1yp+1yp+1yp+1 yp+2yp+2yp+2yp+2 m ne ene Algoritmos para rastreio: equação básica do algoritmo do ponto médio para linhas

10 Instituto de Computação - UFF 10 e ne e ne xpxpxpxp xp+1xp+1xp+1xp+1 xp+2xp+2xp+2xp+2 ypypypyp m y p + 1/2 y p + 3/2 m ne memememe Algoritmos para rastreio: algoritmo do ponto médio - versão para aritmética inteira

11 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

12 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

13 Instituto de Computação - UFF 13 x F(x,y) = 0 45 o y 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. 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. O ponto de transição é o que possui gradiente na direção dada pelo ângulo de 45 graus. 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

14 Instituto de Computação - UFF 14 O critério do ponto médio é aplicado de forma semelhante ao aplicado para linhas. O critério do ponto médio é aplicado de forma semelhante ao aplicado para linhas. A diferença principal é que F(x,y) é quadrática. A diferença principal é que F(x,y) é quadrática. Para implementar o algoritmo eficazmente é necessário calcular incrementos dos incrementos de y quando x é acrescido de 1. Para implementar o algoritmo eficazmente é necessário calcular incrementos dos incrementos de y quando x é acrescido de 1. Algoritmos para rastreio: rastreio para elipses

15 Instituto de Computação - UFF 15 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. 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. A partir do ponto de transição a curva é y dominante e as escolhas são s e se. A partir do ponto de transição a curva é y dominante e as escolhas são s e se. e se m memememe m se F(x,y) = 0 Algoritmos para rastreio: rastreio para elipses

16 Instituto de Computação - UFF 16 O rastreio de um círculo é um caso particular do rastreio de uma elipse. O rastreio de um círculo é um caso particular do rastreio de uma elipse. Trabalhamos com o segundo octante, no qual a curva é x dominante. Trabalhamos com o segundo octante, no qual a curva é x dominante. Utilizamos a simetria do círculo para definir os pontos nos demais octantes. Utilizamos a simetria do círculo para definir os pontos nos demais octantes. Algoritmos para rastreio: rastreio de círculos

17 Instituto de Computação - UFF 17 x=0,y=raio; fragmento(x,y); while (x

18 Instituto de Computação - UFF 18 Algoritmos para rastreio: rastreio de polígonos

19 Instituto de Computação - UFF Algoritmos para rastreio: rastreio de polígonos – noção de interior para um polígono qualquer

20 Instituto de Computação - UFF 20 y ysys x xi4xi4 y max y min 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 Achar ymax e ymin Para cada y [ymax,ymin] Para cada aresta calcular as interseções ordenar interseções desenhar linhas horizontais vx= {x i1, x i0, x i4, x i3 } i0i0i1i1i3i3i4i4 xi1xi1 xi0xi0 xi3xi3 Algoritmos para rastreio: preenchimento de polígonos

21 Instituto de Computação - UFF 21 inclui vértices: i0-i1, i2-i3, i4-? i0-i1, i2-i3, i4-? não inclui vértices: i0-? i0-? xy ysysysys i0i0i0i0 i2i2i2i2 i3i3i3i3 0 i1i1i1i1 i4i4i4i4 3 xy ysysysys i0i0i0i0 i2i2i2i2 i3i3i3i3 0 i1i1i1i1 i4i4i4i4 3 xy ysysysys i0i0i0i0 i2i2i2i2 i3i3i3i3 0 i1i1i1i1 i4i4i4i4 3 Solução: xy ysysysys i0i0i0i0 0 i4i4i4i4 3 ou xy ysysysys i0i0i0i0 i2i2i2i2 i3i3i3i3 0 i1i1i1i1 3 Algoritmos para rastreio: interseção nos vértices

22 Instituto de Computação - UFF 22 Interpolação linear na aresta ys+1ys+1ys+1ys+1 dy = 1 xy y0y0y0y0 y1y1y1y1 ysysysys x1x1x1x1 x0x0x0x0 0 xixixixi x i+1 Algoritmos para rastreio: otimização do algoritmo de preenchimento – interpolação linear

23 Instituto de Computação - UFF B C a b c x y A Algoritmos para rastreio: otimização do algoritmo de preenchimento – triângulos

24 Instituto de Computação - UFF 24 B C a b c x y A x y B C a b c A Algoritmos para rastreio: possíveis configurações para um triângulo y A y B y C

25 Instituto de Computação - UFF 25 B C a b c x y A yCyCyCyC yAyAyAyA yByByByB xaxaxaxa xbxbxbxb ysysysys B C a b c x y A yCyCyCyC yAyAyAyA yByByByB xcxcxcxc xbxbxbxb ysysysys Algoritmos para rastreio: rastreio de um triângulo


Carregar ppt "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)."

Apresentações semelhantes


Anúncios Google