pipeline gráfico -...

27
1 Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa Rasterização Alberto B. Raposo e Marcelo Gattass [email protected] http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm Alberto Raposo – PUC-Rio Pipeline Gráfico Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display Cluter & Durand, MIT

Upload: vanlien

Post on 05-Dec-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

1

Alberto Raposo – PUC-Rio

INF 1366 – Computação Gráfica Interativa

Rasterização

Alberto B. Raposo e Marcelo [email protected]

http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm

Alberto Raposo – PUC-Rio

Pipeline GráficoModeling

Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Cluter & Durand, MIT

2

Alberto Raposo – PUC-Rio

Transformações de Modelagem• Modelos 3D definidos em seu

próprio sistema de coordenadas(object space)

• Transformações de modelagemorientam os modelos de acordocom um sistema de coordenadascomum (world space)

Modeling Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display Object space World spaceCluter & Durand, MIT

Alberto Raposo – PUC-Rio

Transformação de VisualizaçãoModeling

Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Eye space

World space

• Mapeia o world space para o eye space

• Posição do observador é colocada na origem e a direçãode foco é orientada ao longo de um dos eixos (normalmente z)

Cluter & Durand, MIT

3

Alberto Raposo – PUC-Rio

Clipping (Recorte)• Transforma para Normalized

Device Coordinates (NDC)

• Partes do objetofora do volume de visualização(view frustum) são removidas

Modeling Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Eye space NDC

Cluter & Durand, MIT

Alberto Raposo – PUC-Rio

Projeções• Objetos são projetados para o espaço

2D da imagem (screen space)Modeling

Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

NDC Screen Space

Cluter & Durand, MIT

4

Alberto Raposo – PUC-Rio

Rasterização• Rasteriza objetos em pixels• Interpola valores (cores,

profundidade, etc.)

Modeling Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Cluter & Durand, MIT

Alberto Raposo – PUC-Rio

Visibilidade / Display• Cada pixel lembra o objeto

mais próximo (depth buffer)

• Quase todas as etapas do pipelina gráfico envolvemudança de sistema de coordenadas.

Transformações sãofundamentais em computaçãográfica!

Modeling Transformations

Illumination(Shading)

Viewing Transformation(Perspective / Orthographic)

Clipping

Projection (to Screen Space)

Scan Conversion(Rasterization)

Visibility / Display

Cluter & Durand, MIT

5

Alberto Raposo – PUC-Rio

Rasterizar

•Converter coordenadas da tela em cores de pixels

L. McMillanMIT 6.837 notes (Fall ’98)

Alberto Raposo – PUC-Rio

Problema

• Primitivas geométricas são contínuas; tela é discreta (pixels)

Cluter & Durand, MIT

6

Alberto Raposo – PUC-Rio

2D Scan Conversion (Rasterização)• Solução: computar aproximações discretas

para desenho das primitivas• Rasterização:algoritmos para geração

eficiente dessa aproximação

Cluter & Durand, MIT

Algoritmos de rasterização de linhasSuponha ∆x > ∆ySuponha ∆x > ∆y

incrementa x evê o que acontece com y

incrementa y evê o que acontece com x

∆x = 5, ∆y =3

7

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

SetPixel(x1,y1, color); while( x1 < x2 )

{x1++;y = m*x1 + b;

SetPixel(x1,ROUND(y), color);}

}

Algoritmo simples de linha(no primeiro octante)

yi = m xi + b

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

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

SetPixel(x1,y1, c); y = y1;

while( x1 < x2 ){x1++;y += m;

SetPixel(x1,ROUND(y), c);}

}

Algoritmo de linha incrementalSe xi+1 = xi + 1

entãoyi+1 = yi + ∆y/∆x

8

Algoritmo de linha baseado no erro

erro de manter y

0.5

-0.5 x

void BresLine0(int x1, int y1, int x2, int y2, int c){int Dx = x2 – x1;int Dy = y2 - y1;float e= -0.5;

SetPixel(x1, y1, c);

while( x1 < x2 ){x1++; e+=Dy/Dx;

if (e>=0) { y1++ ; e -= 1;

}

SetPixel(x1, y1, c);}

}

Algoritmo de linha baseado no erro

erro de manter y

0.5

-0.5 x

e = erro - 0.5

x

0.5

-0.5

9

Algoritmo de Bresenhamvoid BresLine1(int x1, int y1,

int x2, int y2, int c){int Dx = x2 - x1;int Dy = y2 - y1;int ei = -Dx;

SetPixel(x1, y1, c);

while( x1 < x2 ){x1++; ei += 2*Dy;

if (ei>=0) { y1++ ; ei - = 2*Dx;

}

SetPixel(x1, y1, c);}

}

void BresLine1(int x1, int y1, int x2, int y2, int c)

{int Dx = x2 - x1;int Dy = y2 - y1;int ei = -Dx;

SetPixel(x1, y1, c);

while( x1 < x2 ){x1++; ei += 2*Dy;

if (ei>=0) { y1++ ; ei - = 2*Dx;

}

SetPixel(x1, y1, c);}

}

void BresLine0(int x1, int y1, int x2, int y2, int c)

{int Dx = x2 - x1;int Dy = y2 - y1;float e= -0.5;

SetPixel(x1, y1, c);

while( x1 < x2 ){x1++; e+=Dy/Dx;

if (e>=0) { y1++ ; e - = 1;

}

SetPixel(x1, y1, c);}

}

void BresLine0(int x1, int y1, int x2, int y2, int c)

{int Dx = x2 - x1;int Dy = y2 - y1;float e= -0.5;

SetPixel(x1, y1, c);

while( x1 < x2 ){x1++; e+=Dy/Dx;

if (e>=0) { y1++ ; e - = 1;

}

SetPixel(x1, y1, c);}

}

ei = 2*Dx*e

válidos somente quando Dx>Dy, x2 > x1 e y2 > y1

Equação implícita da reta

x1 x2

y1

y2

x

yBx

DxDyy +=

0...),( =+−= DxByDxxDyyxF

( )DxDyn −=

F x y( , ) > 0

F x y( , ) < 0

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

10

Equação implícita da reta

E

NE

xp xp+1 xp+2

yp

Myp+1/2

Algoritmo do ponto médio- variável de decisão -

d F x y a x b y cp p p p= + + = + + + +( , ) ( ) ( )1 112

12

F Me s c o l h a N E

e s c o l h a E( ) =

> →≤ →

⎧⎨⎩

00

ME

d F x y a x b y cn e w p p p p= + + = + + + +( , ) ( ) ( )2 212

12

d d an e w o l d= +

d F x y a x b y cn e w p p p p= + + = + + + +( , ) ( ) ( )2 232

32

d d a bn e w o l d= + +MNE

∆ E a=

∆ N E a b= +

E

NE

xp xp+1 xp+2

yp

Myp+1/2

yp+3/2MNE

ME

11

Algoritimo do ponto médio- redução para inteiros -

d F x y a x b y cs t a r t = + + = + + + +( , ) ( ) ( )0 01

2 0 01

21 1

d F x y a b a bs t a r t = + + = +( , ) / /0 0 2 2∆∆

E

N E

aa b

== +

d a bs t a r t = +2 .

( )∆

∆E

N E

aa b

=

= +

22

d F x y= 2 . ( , )

void MidpointLine(int x0, int y0, int x1, int y1, int color){

int dx = x1-x0;int dy = y1-y0;int d=2*dy-dx; /* Valor inicial da var. decisao */int incrE = 2*dy; /* incremento p/ mover E */int incrNE = 2*(dy-dx); /* incremento p/ mover NE */int x=x0;int y=y0;Pixel(x,y,color); /* Primeiro pixel */

while (x<xl) {if (d<=0) { /* Escolha E */

d+=incrE;x++;

} else { /* Escolha NE */d+=incrNE;x++;y++;

}Pixel(x,y,color);

} /* while */

} /* MidpointLine */

Algoritimo do ponto médio- código C -

12

Rasterização de Cônicas

x

y

F(x,y) = 0 ∇ =

⎜⎜⎜⎜

⎟⎟⎟⎟

F

FxFy

∂∂∂∂

450

x

y

simetrias do círculo:cada ponto calculadodefine 8 pixels

Rasterização de Cônicas

E

SEM ME

MSE

F(x,y) = 0

x

y

y=raio; for (x=0; x< y; x++) {

if F(M)<0escolha E

elseescolha SE

Pixel (E ou SE)pinte os simétricos

}

13

Alberto Raposo – PUC-Rio

Prenchimento de polígonos

Alberto Raposo – PUC-Rio

Rasterizando Polígonos• Em CG interativa, polígonos “rule the world”• Triângulo é a “unidade mínima” de um polígono

– Qualquer polígono pode ser subdividido em triângulos– Triângulos garantem ser:

• Planares• Convexos

D. BroganUniv. of Virginia

14

Alberto Raposo – PUC-Rio

Triangularização

• Polígonos convexos sãofacilmente triangularizados(Delaunay)

• Pológonos côncavos apresentamdesafios

D. BroganUniv. of Virginia

Alberto Raposo – PUC-Rio

Preenchimento “força bruta” para triângulos• Para cada pixel

– Compute as equações das linhas no centro do pixel– “recorte” pelo triângulo

Cluter & Durand, MIT

Problema: se o triânguloé pequeno, muitoesforço computacional édesperdiçado

15

Alberto Raposo – PUC-Rio

Preenchimento “força bruta” para triângulos• Melhoria:

– Compute apenas pixels dentro da bounding box do triângulo

– Xmin, Xmax, Ymin, Ymax dos vértices do triângulo

Cluter & Durand, MIT

Alberto Raposo – PUC-Rio

Ainda há problemas…

• Computa-se a equação das linhas paramuitos pixels desnecessários

Cluter & Durand, MIT

16

Alberto Raposo – PUC-Rio

Use rasterização de linhas

• Computar os pixels das bordas

[P. Shirley, pag 55]

Cluter & Durand, MIT

Alberto Raposo – PUC-Rio

Rasterização Scan-Line

• Computar os pixels das bordas• Preencher o meio

Shirley page 55

17

Alberto Raposo – PUC-Rio

Scan-line Rasterization

• Requer um “setup”inicial para ser preparado

[P. Shirley, pag 55]

Cluter & Durand, MIT

Alberto Raposo – PUC-Rio

Recorte (clipping)• Como retirar partes forada janela?

Cluter & Durand, MIT

18

Alberto Raposo – PUC-Rio

Rasterização Geral de Polígonos

• Considere o polígono abaixo:

• Como saber se um pixel da scanline estádentro ou for a do polígono?

A

B

C

D

E

F

D. BroganUniv. of Virginia

Alberto Raposo – PUC-Rio

Rasterização de Polígonos

• Pontos interior-exterior

D. BroganUniv. of Virginia

19

Alberto Raposo – PUC-Rio

Rasterização de Polígonos• Pontos interior-exterior

D. BroganUniv. of Virginia

Alberto Raposo – PUC-Rio

Interior e exterior

20

Alberto Raposo – PUC-Rio

Rasterização Geral de Polígonos

• Cuidados– E se está exatamente na extremidade do

vértice?– Vértices compartilhados?– Aresta horizontal?

• A-B e I-H

B

CD

E

FG

I H

J

AD. BroganUniv. of Virginia

Preenchimento de polígonos

y

ys

x

0

1

23

4

0xi1 xi0 xi4 xi3

ymax

ymin

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

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

acha ymax e ymin

Para cada ys∈ [ymax , ymin]

Para cada aresta

calcula as interseções

ordena interseções

desenha linhas horizontais

acha ymax e ymin

Para cada ys∈ [ymax , ymin]

Para cada aresta

calcula as interseções

ordena interseções

desenha linhas horizontais

vx= {xi1 , xi0 , xi4 , xi3}vx= {xi1 , xi0 , xi4 , xi3}

i0i1 i3i4

21

Preenchimento de polígonos(scan passando por vértices)

y

ys

x

01

2

3 5i0 i2

i3

0

i1 i4

4

Preenchimento de polígonos(scan passando por vértices)

y

ys

x

01

2

3 5i0 i2

i3

0

i1 i4

4

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

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

não inclui vértices:i0-?

não inclui vértices:i0-?

y

ys

x

01

2

3 5i0 i2

i3

0

i1 i4

4

y

ys

x

01

2

3 5i0

04

22

Interseção nos vértices

ousó inclui vértices de menor y:i0-i4

só inclui vértices de menor y:i0-i4 ☺

só inclui vértices de maior y:i0-i1, i2-i3

só inclui vértices de maior y:i0-i1, i2-i3 ☺

reta horizontal não produz interseçãoreta horizontal não produz interseção

Alberto Raposo – PUC-Rio

Rasterização Geral de Polígonos

• Idéia básica: teste de paridade

for each scanlineedgeCnt = 0;for each pixel on scanline (l to r)

if (oldpixel->newpixel crosses edge) edgeCnt ++;

// draw the pixel if edgeCnt oddif (edgeCnt % 2)

setPixel(pixel);D. BroganUniv. of Virginia

23

Alberto Raposo – PUC-Rio

Faster Polygon Rasterization• Como otimizar o código?

for each scanlineedgeCnt = 0;for each pixel on scanline (l to r)

if (oldpixel->newpixel crosses edge) edgeCnt ++;

// draw the pixel if edgeCnt oddif (edgeCnt % 2)

setPixel(pixel);

• Alto custo: testar os pixels para cada aresta• Solução: active edge table (AET) – tabela de arestas

ativasD. BroganUniv. of Virginia

Alberto Raposo – PUC-Rio

Active Edge Table• Idéia:

– Arestas com intersecção com uma determinadascanline provavelmente também interceptam a próxima scanline

– A ordem das intersecções não muda muito de uma scanline para outra

D. BroganUniv. of Virginia

24

Alberto Raposo – PUC-Rio

Active Edge Table (AET)• Algoritmo: scanline from bottom to top…

– Selecione a coordenada y mínima de cada aresta– A partir de baixo (bottom), coloque arestas com Ymin= 0 na AET– Para cada scanline:

• Selecione as arestas na AET pela interseção em x• Caminhe da esquerda para direita, selecionando os pixels com a regra da

paridade (interior-exterior)• Incremente a scanline• Retire as arestas com Ymax < Y• Adicione as arestas com Ymin < Y• Recalcule as interseções das arestas

– Pare quando Y > Ymax para todas as arestasD. BroganUniv. of Virginia

Alberto Raposo – PUC-Rio

Active Edge Table (AET)

Slater, Steed & Chrysanthou, 2002

25

Alberto Raposo – PUC-Rio

Active Edge Table (AET)

Slater, Steed & Chrysanthou, 2002

Alberto Raposo – PUC-Rio

Revisão: Rasterização Scan Line

A B

D C

F

EH G

Para a scanline, determine todas as arestas do polígono que a interceptaOrdene as interseções com a scanline em ordem crescenteUse o teste de paridade para saber os pixels que serão desenhadosLinhas horizontais não entram na contagem de paridadePontos mínimos Ymin contribuem na contagem da paridadePontos máximos Ymax não contribuem na contagem da paridade

Aresta de baixo desenhada porque A é min de AH e AB não contribui

Não desenhada porque H é max de AH e HG não contribui na

contagem

Não desenhada porque D é min de ED e incrementa contagem

para 2. DC não contribui.

D. BroganUniv. of Virginia

26

Alberto Raposo – PUC-Rio

Revisão: Rasterização Scan Line• Desenha uma linha por vez• Vantagem: não exige todo o modelo e toda

a imagem na memória

y

Cluter & Durand, MIT

Alberto Raposo – PUC-Rio

Revisão: Rasterização Scan Line

• Inicializa: Raster, Polygons, Edge Table, AEL

• Para cada scanline y– Atualiza Active Edge List (inserir arestas da

EdgeTable[y])

– Rasterizar pixels de acordo com AEL– Atualiza AEL (delete, increment, resort)

27

Alberto Raposo – PUC-Rio

Informações Adicionais• M. Slater et al. Computer Graphics and Virtual

Environments: From Realism to Real-Time, Addison Wesley, 2002.

• Peter Shirley. Fundamentals of ComputerGraphics, A K Peters, Ltd., Natick, MA, USA, 2002.

• Foley, J. D., Van Dam, A., Feiner, S. K., e Huhes, J. F., Phlips, L. R., Introduction to Computer Graphics, Addison-Wesley, 1995.

• Marcelo Gattass: notas de aula. http://www.tecgraf.puc-rio.br/~mgattass/cg.html