View
218
Download
0
Category
Preview:
Citation preview
Alberto Raposo – PUC-Rio
INF 1366 – Computação Gráfica Interativa
Rasterização
Alberto B. Raposo e Marcelo Gattassabraposo@tecgraf.puc-rio.br
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
Alberto Raposo – PUC-Rio
Transformações de Modelagem• Modelos 3D definidos em seu
próprio sistema de coordenadas (object space)
• Transformações de modelagem orientam os modelos de acordo com um sistema de coordenadas comum (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ção de foco é orientada ao longo de um dos eixos (normalmente z)
Cluter & Durand, MIT
Alberto Raposo – PUC-Rio
Clipping (Recorte)• Transforma para Normalized Device
Coordinates (NDC)
• Partes do objeto fora 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
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 pipeline gráfico envolve mudança de sistema de coordenadas. Transformações são fundamentais
em computação gráfica!
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
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
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 linhas Suponha x > y
incrementa x evê o que acontece com y
incrementa y evê o que acontece com x
x = 5, y =3
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 incremental
Se xi+1 = xi + 1
entãoyi+1 = yi + y/x
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
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 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( , ) . . Dxb
Dya
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 Mescolha NEescolha E
( )
00
ME
d F x y a x b y cnew p p p p ( , ) ( ) ( )2 212
12
d d anew old
d F x y a x b y cnew p p p p ( , ) ( ) ( )2 232
32
d d a bnew old MNE
E a
NE a b
E
NE
xp xp+1 xp+2
yp
Myp+1/2
yp+3/2MNE
ME
Algoritimo do ponto médio- redução para inteiros -
d F x y a x b y cstart ( , ) ( ) ( )0 01
2 0 01
21 1
d F x y a b a bstart ( , ) / /0 0 2 2
E
NE
aa b
d a bstart 2.
E
NE
aa b
22
d F x y2. ( , )
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 -
Rasterização de Cônicas
x
y
F(x,y) = 0
F
FxFy
450
x
y
simetrias do círculo:cada ponto calculado define 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)<0 escolha E else escolha SE Pixel (E ou SE) pinte os simétricos}
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
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, muito esforço computacional édesperdiçado
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 para muitos pixels desnecessários
Cluter & Durand, MIT
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
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
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
Alberto Raposo – PUC-Rio
Rasterização de Polígonos• Pontos interior-exterior
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Interior e exterior
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}
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}
i0i1 i3i4
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-?
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
Interseção nos vértices
ousó inclui vértices de menor y: i0-i4
só inclui vértices de maior y: i0-i1, i2-i3
reta 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 scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (edgeCnt % 2) setPixel(pixel);
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Faster Polygon Rasterization• Como otimizar o código?
for each scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (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 determinada scanline 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
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 arestas D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Active Edge Table (AET)
Slater, Steed & Chrysanthou, 2002
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 paridade Pontos 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
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)
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 Computer Graphics, 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
Recommended