Rasterização
.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
Considerações Gerais
.Rasterização é um processo de amostragem
!Domínio contínuo →discreto
!Problemas de aliasingsão esperados
.Cada primitiva pode gerar um grande número de pixels
!Rapidez é essencial
.Em geral, rasterização é feita por hardware
.Técnicas de antialiasingpodem ser empregadas, usualmente extraindo um custo em termos de desempenho
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 ycomo função de x
!Linhas ~ verticais →computar xcomo função de y
Algoritmo Simples
.Assumimos segmentos de reta no primeiro octante, com
!Demais casos resolvidos de forma simétrica
.Inclinação(entre 0 e 1) dada por m =(y2.y1) / (x2.x1)
.Algoritmo:
!Para x desde x1até x2fazer:
.y ← y1+ m * (x .x1) + 0.5
.Pintar pixel (x, y)
Algoritmo Incremental
.Algoritmo simples tem vários problemas:
!Utiliza aritmética de ponto-flutuante
!Sujeito a erros de arredondamento
!Usa multiplicação
!Lento
.Se observarmos que mé a variação em y para um incremento unitário de x, podemos fazer ligeiramente melhor: x← x1; y← y1
Enquanto x ≤ x2fazer: x← x + 1 y← y+ m
Pintar pixel (x, y+ 0.5)
.Ainda usa ponto-flutuante
Algoritmo de Bresenham
.Algoritmo clássico da computação gráfica
.Algoritmo incremental que utiliza apenas soma e subtração de inteiros
.Idéia básica:
!Em vez