You are on page 1of 21

Rasterização

RASTERIZAÇÃO

RASTERIZAÇÃO

Prof. João Brisson Lopes


2004

© JBL - Instituto Superior Técnico 2004 1

RASTERIZAÇÃO

Temas abordados

• Rasterização

• Rasterização de segmentos de recta

• Preenchimento de polígonos

• Aliasing e antialiasing

© JBL - Instituto Superior Técnico 2004 2

1
Rasterização
RASTERIZAÇÃO

• Rasterização

• Rasterização de segmentos de recta

• Preenchimento de polígonos

• Aliasing e antialiasing

© JBL - Instituto Superior Técnico 2004 3

RASTERIZAÇÃO

Nomes ...

• Rasterization

• Scan conversion

• Rasterização

• Conversão por varrimento de linhas

© JBL - Instituto Superior Técnico 2004 4

2
Rasterização
RASTERIZAÇÃO

Rasterização: onde ocorre?


4Visualização =
4Transformação
4Recorte
4Projecção ortogonal
– Conversão de primitivas
8Como desenhar primitivas 2D no ecrã
– Linhas e polígonos
– Rasterização : primitivas → pixéis
– Antialiasing

© JBL - Instituto Superior Técnico 2004 5

RASTERIZAÇÃO

Rasterização
•Transformar Primitivas Gráficas em conjuntos de pixéis
•Coordenadas reais => coordenadas inteiras (Bit Map).

• Algoritmos executados até mihões de vezes para cada cena criada ou actualizada.

• Compromisso entre rapidez e qualidade da imagem (representação fiel dos objectos).

• Desafio: algoritmos optimizados (incrementais, poucos cálculos, operações simples).

© JBL - Instituto Superior Técnico 2004 6

3
Rasterização
RASTERIZAÇÃO

• Rasterização

• Rasterização de segmentos de recta

• Preenchimento de polígonos

• Aliasing e antialiasing

© JBL - Instituto Superior Técnico 2004 7

RASTERIZAÇÃO

Rasterização de Segmentos
1) Considerar só linhas sólidas com
1 pixel de espessura
2) Ignorar variação luminosidade
com densidade de pixéis
3) Casos triviais: rectas horizontais,
verticais e diagonais Y
y, -x y, x
4) Caso mais simples: recta com
declive contido no primeiro
-x, y x, y
octante
5) Transformar para outros octantes -x, -y x, -y X

-y, -x -y, x

© JBL - Instituto Superior Técnico 2004 8

4
Rasterização
RASTERIZAÇÃO

Conversão de linhas: Algoritmo imediato


1) Partir da equação da recta : y = m.x + b

2) Calcular coeficientes a partir dos extremos do segmento: P1(x1, y1) e P2(x2, y2)

m = (y2 - y1) / (x2 - x1)


b = y1 - m. x1

3) Para x1 ≤ x ≤ x2 calcular ordenada usando equação da recta.


Arredondar o resultado para coordenadas do pixel a desenhar

y = Round (m . x + b) = Floor (0.5 + (m . x + b))

Problema: Cada iteração requer:


• Multiplicação e adição virgula flutuante.
• Arredondamento de real para inteiro.
© JBL - Instituto Superior Técnico 2004 9

RASTERIZAÇÃO

Algoritmo Incremental Básico


Digital Differential Analyzer (DDA)
yi+1 = m . xi+1 + b
Linha
(xi + 1 , Round (yi + m))
= m . (xi + 1) + b Desejada

= yi + m (xi , yi)
(xi + 1 , yi + m)
com xi+1 = xi +1
(xi , Round (yi))
yi+1 = Round (yi + m)
Problemas:

• Requer arredondamento virgula flutuante → inteiro por iteração.


• Precisão limitada (virgula flutuante) ⇒ acumulação de erros em cada iteração

© JBL - Instituto Superior Técnico 2004 10

5
Rasterização
RASTERIZAÇÃO

Linhas Rectas e Pontos

•Função implícita da recta

F(x, y) = a.x + b.y + c

• Posição de um ponto relativamente a uma recta:


• substituir coordenadas do ponto na equação e examinar o sinal.

F(x, y) < 0
F(x, y) = 0

F(x, y) > 0

© JBL - Instituto Superior Técnico 2004 11

RASTERIZAÇÃO

Critério do Ponto Médio


Escolher o pixel:
calcular F(M) e testar sinal:

NE

d = F (M) = F (xp + 1, yp + 1/2) Q


M

d = a (xp + 1) + b (yp + 1/2) + c E


(xp, yp)
Pixel Escolhas para Escolhas para
Anterior pixel corrente pixel seguinte
(d > 0) => Escolhe Pixel NE (Nordeste)
(d < 0) => Escolhe Pixel E (Este)
(d = 0) => Escolhe qualquer dos dois (convenciona-se escolher E)

© JBL - Instituto Superior Técnico 2004 12

6
Rasterização
RASTERIZAÇÃO

Cálculo Incremental da Variável de Decisão

d ant = a (xp + 1) + b (yp + 1/2) + c

1) Se escolhemos E ( d <= 0 ):
yp+1
d novo = a (xp + 2) + b (yp + 1/2) + c M
= a (xp + 1) + a + b (yp + 1/2) + c yp
= d ant + a xp xp+1 xp+2

d novo = d ant + a => incr.E = a

2) Se escolhemos NE ( d > 0 ):
yp+2
d novo = a (xp + 2) + b (yp + 3/2) + c M
= a (xp + 1) + a + b (yp + 1/2) + b + c yp+1
= d ant + a + b
yp
d novo = d ant + a + b => incr.NE = a + b xp xp+1 xp+2

© JBL - Instituto Superior Técnico 2004 13

RASTERIZAÇÃO

Valores Iniciais da Variável Decisão


• Extremos do segmento de recta devem “cair” em posições da grelha inteira, logo:

F (x1, y1) = F (x2, y2) = 0

• Para o segundo pixel, escolher E ou NE, ponto médio = M (x1 + 1, y1 + 1/2):

F (M) = a (x1 + 1) + b (y1 + 1/2) + c


= (a.x1 + b.y1 + c) + a + b/2
= F(x1, y1) + a + b/2
= a + b/2
• Assim, tem-se:

d0 = a + b/2
incr.E = a
incr.NE = a + b

© JBL - Instituto Superior Técnico 2004 14

7
Rasterização
RASTERIZAÇÃO

Coeficientes e Incrementos
F(x, y) = a.x + b.y + c
se ∆y = y2 – y1 e ∆ x = x2 – x1
∆y
y= x+B
∆x
∆x y = ∆y x + ∆x B
∆y . x - ∆x . y + ∆x B = a . x + b . y + c = 0

a=∆y b=-∆x c=∆x.B

• Assim, tem-se:

d0 = a + b/2 = ∆ y - ∆ x/2 d0 = 2. ∆ y - ∆ x
incr.E = a = ∆ y Para eliminar incr.E = 2. ∆ y
a fracção no valor inicial,
incr.NE = a + b = ∆ y - ∆ x multiplicar tudo por 2 incr.NE = 2. (∆ y - ∆ x)
(função homogénea)

© JBL - Instituto Superior Técnico 2004 15

RASTERIZAÇÃO

Algoritmo de Bresenham
void Bresenham (int x1, int y1, int x2, int y2, int linecolor))
{
int dx = x2 – x1; int dy = y2 – y1;
int d = 2 * dy - dx;
int incrE = 2 * dy; int incrNE = 2 * (dy - dx);
int x = x1; int y = y1;
WritePixel (x, y, linecolor);

while (x < x2) {


if (d <= 0) {
d += incrE; x++;
}
else {
d += incrNE; x++; y++;
}
WritePixel (x, y, linecolor);
}
}

© JBL - Instituto Superior Técnico 2004 16

8
Rasterização
RASTERIZAÇÃO

Algoritmo de Bresenham: Um Exemplo

P1 = (5, 8) P2 = (9, 11)


12
dx = 4 dy = 3
11 d0 = 2 incrE = 6 incrNE = - 2

10 Write (5, 8)

9 d0 = 2 => NE => Write (6, 9)

8 d1 = 0 => E => Write (7, 9)

7 d2 = 6 => NE => Write (8, 10)

6 d3 = 4 => NE => Write (9, 11)


3 4 5 6 7 8 9 10

© JBL - Instituto Superior Técnico 2004 17

RASTERIZAÇÃO

Comparação: Bresenham vs. Incremental


xi Incremental Bresenham

m=(11-8)/(9-5)=0,75 dx=9-5=4 dy=11-8=3

d=2×3-4=2

incE=2×3=6 incNE=2×(3-4)=-2

yi =yi-1+m round(yi ) di avanço di+1 yi

5 - 8 0 - 2 8

6 8,75 9 2 NE 0 9

7 9,5 10 0 E 6 9

8 10,25 10 6 NE 4 10

9 11,0 11 4 NE - 11

© JBL - Instituto Superior Técnico 2004 18

9
Rasterização
RASTERIZAÇÃO

• Rasterização

• Rasterização de segmentos de recta

• Preenchimento de polígonos

• Aliasing e antialiasing

© JBL - Instituto Superior Técnico 2004 19

RASTERIZAÇÃO

Preenchimento de Polígonos

• Algoritmos de preenchimento para polígonos:


•Bidimensionais
Superfície do ecrã
•Côncavos
•Convexos
•Mais simples
•Simplesmente Conexos
•Multiplamente Conexos (com buracos interiores)
•Com ou sem auto-intersecções

© JBL - Instituto Superior Técnico 2004 20

10
Rasterização
RASTERIZAÇÃO

Polígonos...

A B

© JBL - Instituto Superior Técnico 2004 21

RASTERIZAÇÃO

Preenchimento de Polígonos
• Princípios Básicos (tirando partido da coerência espacial)
1) Traçar sucessivas linhas de varrimento
horizontais (scan lines)

2) Calcular intersecção entre scan line e arestas Y


Arredondar valores para o interior do
polígono. scan-line

3) Ordenar pontos por abscissa crescente


(x1 < x2 < x3 < x4).

4) Preeencher cadeias de pixels (“spans”) entre


x3 X
pares de pontos x1 x2 x4
Delimitar regiões interiores ao polígono.
(x1 a x2: in; x2 a x3: out; x3 a x4: in;)
© JBL - Instituto Superior Técnico 2004 22

11
Rasterização
RASTERIZAÇÃO

Spans e Arredondamentos

• À esquerda
– Arredondamento por excesso
– Exemplos:
• 7,3 -> 8
• 6,0 -> 6
• À direita
– Arredondamento por defeito
– Exemplos:
• 7,8 -> 7
• 6,0 -> 6

© JBL - Instituto Superior Técnico 2004 23

RASTERIZAÇÃO

Regras para contabilização de intersecções:


1) Scan-line ao passar por um vértice intermédio,contabiliza intersecção
na aresta intersectada em ymin e não na aresta intersectada em ymax .
A B
(0) C
A
B (1)
C A (2)

C B
1 intersecção em [AB], 0 intersecções em [AB], 1 intersecção em [AB],
0 intersecções em [BC] 0 intersecções em [BC] 1 intersecção em [BC]

2) Não contabilizar intersecções com arestas horizontais, colineares com a “scan-line”.


G F [A,B] é preenchido
H
I E [C,D] é preenchido
C D
[H,I] não é preenchido
J
A B [F,G] não é preenchido

© JBL - Instituto Superior Técnico 2004 24

12
Rasterização
RASTERIZAÇÃO

Algoritmo Scan-Line (com coerência de aresta)

•Arestas intersectadas por uma linha i+3


podem ser as intersectadas pela linha i+2
i+1
anterior. i

Para cada aresta:


• Usando coerência de aresta, pontos ∆x = x ( y max ) − x( ymin )
de intersecção com a nova linha ∆y = ymax − y min
calculados de modo incremental, a partir dos 1 1
x = x− b
pontos calculados para a scan-line anterior m m
1 ∆x
=
m ∆y
• Cálculo incremental apenas requer uma
x( y + 1) = ( y + 1) − b
1 1
soma algébrica. m m
1 1 1
= y+ − b
m m m
= x( y ) +
1
m

© JBL - Instituto Superior Técnico 2004 25

RASTERIZAÇÃO

A Tabela de Lados (Edge Table: ET)


Y Tabela de Lados

Y ……….
11
12 ……….
10
D
10 ……….
F 9
8 E ……….
8
EF DE
6
7 9 7 -5/2 11 7 6/4
C ………. ymax x 1/m
4
6
A CD
2
5 11 13 0 -
B ……….
0
4
0 2 4 6 8 10 12 14 X FA
3 9 2 0
……….
2
AB BC
1 3 7 -5/2 5 7 6/4 -

•O algoritmo mantém uma Tabela de Lados Activos (Active Edge Table: AET),
•AET regista a informação relativa aos lados intersectados pela linha corrente.

© JBL - Instituto Superior Técnico 2004 26

13
Rasterização
RASTERIZAÇÃO

Principais Passos do Algoritmo:


1) y = a menor coordenada y para com entrada não nula em ET
2) Criar AET e inicializá-la vazia

3) Repetir até que AET e ET fiquem vazias

3.1) Mover de ET para AET os lados com ymin = y,


Ordenar esses lados por x

3.2) Preencher spans da linha corrente utilizando pares de coordenadas x


relativas aos lados registados em AET

3.3) Remover de AET todos os lados com ymax = y


(não envolvidos na próxima linha)

3.4) Incrementar o valor de y de uma unidade (ordenada da próxima scan-line)

3.5) Para as arestas em AET, incrementar x de 1/m


Reordenar AET por x

© JBL - Instituto Superior Técnico 2004 27

RASTERIZAÇÃO

AET e ET
Y Tabela de Arestas Activas Tabela de Arestas

AB BC
1 3 7 -5/2 5 7 6/4 - FA, CD, EF, DE

AB BC
2 3 4,5 -5/2 5 8,5 6/4 - FA, CD, EF, DE

FA BC
3 9 2 0 5 10 6/4 - CD, EF, DE

FA BC
4 9 2 0 5 11,5 6/4 - CD, EF, DE

FA CD
5 9 2 0 11 13 0 - EF, DE

FA CD
6 9 2 0 11 13 0 - EF, DE

FA EF DE CD
7 9 2 0 9 7 -5/2 11 7 6/4 11 13 0 - vazia

FA EF DE CD
8 9 2 0 9 4,5 -5/2 11 8,5 6/4 11 13 0 - vazia

DE CD
9 11 10 6/4 11 13 0 - vazia

DE CD
10 11 11,5 6/4 11 13 0 - vazia

11 vazia vazia

© JBL - Instituto Superior Técnico 2004 28

14
Rasterização
RASTERIZAÇÃO

Fragmentação

14

Y span span
12
14 ∆ esquerdo
- ∆ direito
13 - 10
12 6-6
11 5-5
10 5-5 - 8
9 4-5 6-8
8 3-4 6-7
7 3-4 6-7 6
6 2-4 6-6
5 1-4 6-6
4 5-5 4
3 -
2 -
1 4-4 2

0
0 2 4 6 8 10

© JBL - Instituto Superior Técnico 2004 29

RASTERIZAÇÃO

• Rasterização

• Rasterização de segmentos de recta

• Preenchimento de polígonos

• Aliasing e antialiasing

© JBL - Instituto Superior Técnico 2004 30

15
Rasterização
RASTERIZAÇÃO

Sinais, Amostragem e Erros

© JBL - Instituto Superior Técnico 2004 31

RASTERIZAÇÃO

Efeito de Escada

© JBL - Instituto Superior Técnico 2004 32

16
Rasterização
RASTERIZAÇÃO

Perda de Detalhe - 1

Original e pixéis

Incorrecto

Correcto

© JBL - Instituto Superior Técnico 2004 33

RASTERIZAÇÃO

Perda de Detalhe - 2

© JBL - Instituto Superior Técnico 2004 34

17
Rasterização
RASTERIZAÇÃO

Texturas que se Desintegram

© JBL - Instituto Superior Técnico 2004 35

RASTERIZAÇÃO

Técnicas de Antialiasing

• Pré-filtragem
– opera no espaço dos objectos
– considerar a área que vai corresponder a um pixel
– cor do pixel = cores da área ponderadas pelas sub áreas
que ocupam

• Pós-filtragem
– opera no espaço de imagem
– gerar imagem com 2x, 3x, 4x, … maior resolução
– cor do pixel = média das cores dos 4, 9, 16, … pixéis

© JBL - Instituto Superior Técnico 2004 36

18
Rasterização
RASTERIZAÇÃO

Pré-filtragem

© JBL - Instituto Superior Técnico 2004 37

RASTERIZAÇÃO

Pré-filtragem de Pontos e Segmentos - 1

• Primitivas com menos de duas dimensões


– Segmentos de recta – 1 dimensão
– Pontos – 0 dimensões
• Não ocupam áreas no espaço dos objectos
– Consequência: desaparecem!
• Como representá-las?
– Atribuindo
• Espessura aos segmentos: 1 pixel, p. ex.
• Área aos pontos: círculo com 1 pixel de diâmetro, p. ex.

© JBL - Instituto Superior Técnico 2004 38

19
Rasterização
RASTERIZAÇÃO

Pré-filtragem de Pontos e Segmentos - 2

© JBL - Instituto Superior Técnico 2004 39

RASTERIZAÇÃO

Pré-filtragem de Segmentos de Recta

Sem filtragem

Não ponderada

Filtro de Gupta-Sproull Ponderada


Cone de raio 1

© JBL - Instituto Superior Técnico 2004 40

20
Rasterização
RASTERIZAÇÃO

Pós - Filtragem

Original Sobre amostra de 4x reduzida


(256x256) para 256x256

© JBL - Instituto Superior Técnico 2004 41

RASTERIZAÇÃO

Sumário
4Conversão de primitivas
4Como desenhar primitivas 2D no ecrã
4Linhas
4Algoritmo de Bresenham
4Polígonos
4Rasterização : primitivas → pixels

© JBL - Instituto Superior Técnico 2004 42

21

You might also like