26
Dispositivos de Visualização e Rasterização Alex F. V. Machado [email protected]

Dispositivos de Visualização e Rasterização Alex F. V. Machado [email protected]

Embed Size (px)

Citation preview

Page 1: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Dispositivos de Visualizaçãoe Rasterização

Alex F. V. [email protected]

Page 2: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Dispositivos de Visualização

• Toda imagem criada através de recursos computacionais deve ser representada em algum dispositivo físico que permita a sua visualização.

• Diversas tecnologias e diferentes tipos de dispositivos são utilizados para gerar representações visuais.

Page 3: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Dispositivos de Visualização

É possível classificar os dispositivos de exibição (traçadores, impressoras e terminais de vídeo) em duas principais categorias, segundo a forma pela qual as imagens são geradas:

• Dispositivos vetoriais: traçadores digitais, osciloscópio e monitor CRT (Cathode Ray Tube).

• Dispositivos matriciais: Impressoras e Dispositivos de Vídeo de Varredura (Raster Scanning VDUs)

Page 4: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Dispositivos de Visualização

• Dispositivo gráfico vetorial (osciloscópio)

Page 5: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Dispositivos de Visualização

• Dispositivo gráfico matricial(Dispositivos de Vídeo de Varredura)

Page 6: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Dispositivos de Visualização

• Dispositivo gráfico matricial(Dispositivos de Vídeo de Varredura)

Page 7: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização

Page 8: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Representação Vetorial x Matricial

• Normalmente, gráficos são definidos através de primitivas geométricas como pontos, segmentos de retas, polígonos, etc– Representação vetorial

• Dispositivos gráficos podem ser pensados como matrizes de pixels (rasters)– Representação matricial

• Rasterização é o processo de conversão entre representações vetorial e matricial

Page 9: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Representação Vetorial x Matricial

Obs.:

•SRU - Sistema de Referência do Universo

•SRT - Sistema de Referência da Tela

•SRC - Sistema de Referência da Câmera (3D)

Page 10: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Considerações Gerais

• Rasterização é um processo de amostragem– Domínio contínuo discreto– Problemas de aliasing são esperados

• Cada primitiva pode gerar um grande número de pixels – Rapidez é essencial

• Em geral, rasterização é feita por hardware• Técnicas de antialiasing podem ser empregadas,

usualmente extraindo um custo em termos de desempenho

Page 11: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta• Segmento de reta entre P1= (x1, y1) e P2= (x2, y2)

– Já foi recortado com relação ao viewport

• Objetivo é pintar os pixels atravessados pelo segmento de reta– Na verdade, nem todos, apenas os mais próximos

• Reta de suporte dada por a x + b y + c = 0• Queremos distinguir os casos

– Linhas ~ horizontais computar y como função de x– Linhas ~ verticais computar x como função de y

Page 12: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

yi = m xi + b

onde:

m = y/xb = y1 - m x1

Rasterização de Segmentos de Reta(algoritmo básico)

Page 13: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

yi = m xi + b

onde:

m = y/xb = y1 - m x1

Rasterização de Segmentos de Reta(algoritmo básico)

Page 14: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

void Line1(int x1, int y1, int x2, int y2, int color){ float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y; int x; PutPixel(x1,y1,color);

for (x=x1+1; x<=x2; x++) { y = m*x + b; PutPixel(x,ROUND(y), color); }}

yi = m xi + b

onde:m = y/xb = y1 - m x1

Rasterização de Segmentos de Reta(algoritmo básico)

Page 15: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

void Line1(int x1, int y1, int x2, int y2, int color){ float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y; int x; PutPixel(x1,y1,color);

for (x=x1+1; x<=x2; x++) { y = m*x + b; PutPixel(x,ROUND(y), color); }}

(x1,y1)

(x2,y2)

y=mx+b

b

(3,2)

(9,4)

y=(1/3)x+1

1

3

(3,2)

4

(4,2.33)

5

2 (4,2)

(5,3)

(5,2.66)

32

Exemplo

Calcula-se m e b 1a iteração 2a iteração 3a iteração

yi = m xi + b

onde:m = y/xb = y1 - m x1

Rasterização de Segmentos de Reta(algoritmo básico)

Page 16: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Como melhorar o algoritmo?

void Line2(int x1, int y1, int x2, int y2, int color){ float m = (y2-y1)/(x2-x1); float b = y1 - m*x1; float y; int x; PutPixel(x1,y1,color);

for (x=x1+1; x<=x2; x++) { y = m*x + b; PutPixel(x,ROUND(y), color); }}

① multiplication

② addition

③ round operation

Como tirar a multiplicação?

Page 17: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (outros algoritmos)

(Algoritmo de linha incremental)

(Algoritmo de Bresenham)

Page 18: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

void LineDDA(int x1, int y1, int x2, int y2, int color){ float y; float m = (y2-y1)/(x2-x1); int x; PutPixel(x1,y1, color); y = y1;

for (x=x1+1; x<=x2; x++) { y = y+m; PutPixel(x,ROUND(y), color); }}

Se xi+1 = xi + 1

entãoyi+1 = yi + y/x

m

Rasterização de Segmentos de Reta(algoritmo de linha incremental)

Page 19: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

void LineDDA(int x1, int y1, int x2, int y2, int color){ float y; float m = (y2-y1)/(x2-x1); int x; PutPixel(x1,y1, color); y = y1;

for (x=x1+1; x<=x2; x++) { y = y+m; PutPixel(x,ROUND(y), color); }}

Se xi+1 = xi + 1

entãoyi+1 = yi + y/x

Ainda são necessários uma adição de floats e uma round operation.

É possível fazer um algoritmo apenas com somas de inteiros.O nome desse algoritmo é: Bresenham’s algorithm.

m

Rasterização de Segmentos de Reta(algoritmo de linha incremental)

Page 20: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Entendendo o prolema:Desenho de linhas

Page 21: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (Algoritmo de Bresenham)

Page 22: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (Algoritmo de Bresenham)

Page 23: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (Algoritmo de Bresenham)

Page 24: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (Algoritmo de Bresenham)

void BresLine(int x1, int y1, int x2, int y2, int cor)x = x1; y = y1;dy = y2-y1; dx = x2-x1;m = dy/dx;e = m – 0.5;for(i=1;i<=dx;i++){

WritePixel(x, y);IF (e > 0) {

y = y+1;e = e – 1;

}e = e+m;x = x+1;PutPixel(x,ROUND(y), color);

}

Page 25: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (Algoritmo de Bresenham)

Outros Octantes

Page 26: Dispositivos de Visualização e Rasterização Alex F. V. Machado alexcataguases@hotmail.com

Rasterização de Segmentos de Reta (Algoritmo de Bresenham)

Vantagens: