Upload
hadieu
View
229
Download
0
Embed Size (px)
Citation preview
Pipeline de Visualização 2DPipeline de Visualização 2D
André Tavares da [email protected]
Capítulo 2 do “Foley”
Requisitos de matemática para CG
• Vetores e pontos
• Matrizes
• Transformações geométricas
• Pontos e espaços afim
• Representação de coordenadas
• Reta
• Plano
Computação Gráfica
Conjunto de técnicas utilizadas para converter dados, de Conjunto de técnicas utilizadas para converter dados, de forma a exibi-los em dispositivos gráficos.forma a exibi-los em dispositivos gráficos.
Visualização 2D
DadosDados..................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
..................................................................................
Processo deProcesso deVisualização 2DVisualização 2D
ModeloModelo ImagemImagem
Visualização 2D
typedef struct{ float xi, yi; float xf, yf;} linha;...
ModeloModelo
Estrutura de Estrutura de dadosdados
ImagemImagem
Mapa de bitsMapa de bits
Vértices ArestasVértices Arestas
Pipeline 2DPipeline 2D
Instanciamento
Instâncias
Lembrando!Descrito por
linhas.
typedef struct{ float xi, yi; float xf, yf;} linha;
Objeto Original
Sistemas de Referência
Sistema de referência do objeto
(SRO)
X
(20,50)
20
50
Y
Sistema de referência do universo
(SRU)
Y
X
(60,50)
50
60
Sistemas de Referência
Sistema de referência da seleção
(SRS)
Sistema de referência do universo
(SRU)
Y
20 X
Janela de seleção(Window)
X
Y
Processo de Visualização 2D(pipeline)
Sistema de referência do objeto
(SRO)
X
(20,50)
20
50
Y
Sistema de referência do universo
(SRU)
Y
X
Instâncias
Instanciamentodos objetos
Processo de Visualização 2D(pipeline)
Sistema de referência do universo
(SRU)
Y
20 X
Janela de seleção(Window)
Processo de Visualização 2D(pipeline)
Sistema de referência da seleção
(SRS)
X
Y
recorte
Sistema de referência do universo
(SRU)
Y
20 X
Janela de seleção(Window)
Sistema de referência da seleção
(SRS)
X
Y
Processo de Visualização 2D(pipeline)
Sistema de referência do dispositivo
(SRD)
Tela, óculos, arquivo,...
Y
X
Especificaçãoda viewport
Sistema de referência do dispositivo
(SRD)
X
Processo de Visualização 2D(pipeline)
Sistema de referência do dispositivo
(SRD)
Y
X
Preenchimento
EtapasSistema de referênciado objeto (SRO)
Sistema de referênciado universo (SRU)
instanciamento
Sistema de referência do universo
(SRU)
Y
X
200
300
(300,200)
Sistema de referência do universo
(SRU)
Y
X
Janela de seleção(Window)
EtapasSistema de referênciado objeto (SRO)
Sistema de referênciado universo (SRU)
instanciamento
Sistema de referênciada seleção (SRS)
recorte 180
250
(250,180)
EtapasSistema de referênciado objeto (SRO)
Sistema de referênciado universo (SRU)
instanciamento
Sistema de referênciada seleção (SRS)
recorte
Sistema de referênciado dispositivo (SRD)
viewport
preenchimentoSistema de
referência do dispositivo(SRD)
Y
X
270
320
(320,270)
Algoritmo de Varredura
Desenho de linhasDesenho de linhas
• Algoritmo Incremental (DDA)
• Algoritmo Bresenham
Algoritmo de Varredura
• Algoritmo incremental Algoritmo incremental
(DDA - Digital Differential Analyzer)– Método para resolver equações diferenciais através de métodos
numéricos.
– Sucessivas operações de incremento baseado no ponto atual.
– Lento pois utiliza floor (arredonda para inteiro inferior ou igual) ou round (arredonda para o o inteiro mais próximo) dependendo da implementação.
Algoritmo de Varredura
• Método incremental - DDA
(0,0)
(8,8)
Dx=xf-xi; Dy=yf-yi; m=Dy/Dx; y=yi; For (x=xi;x<=xf;x++) { draw(x,int(floor(y+0.5), color); y+=m; }
Calcular os pontosCalcular os pontos
RespostaResposta
(0,0);(1,1);(2,2);(3,3);(4,4);(5,5);(6,6);(7,7);(8,8)(0,0);(1,1);(2,2);(3,3);(4,4);(5,5);(6,6);(7,7);(8,8)
Algoritmo de Varredura
• Algoritmo do Ponto Médio – BresenhamAlgoritmo do Ponto Médio – Bresenham
– Atrativo porque usa somente operações aritméticas (não usa round ou floor)
– É incremental• Idéia básica:
– Em vez de computar o valor do próximo y em ponto flutuante, decidir se o próximo pixel vai ter coordenadas (x + 1, y) ou (x + 1, y + 1)
– Decisão requer que se avalie se a linha passa acima ou abaixo do ponto médio (x + 1, y + ½)
Algoritmo de Varredura
• Algoritmo do Ponto Médio – BresenhamAlgoritmo do Ponto Médio – Bresenham
(x + 1, y)
(x + 1, y + 1)
(x, y)
(x + 1, y + ½)
Algoritmo do Ponto Médio - Resumodx = xf – xi;dy = yf – yi;d = dy * 2 - dx;x = xi;y = yi;while (x <= xf){ draw(x, y,color); x++; if(d <= 0) d += dy * 2; else { d += (dy – dx) * 2; y++; }}
(9,11)
(5,8)
Calcular os pontosCalcular os pontos
RespostaResposta
(5,8);(6,9);(7,9);(8,10);(9,11)(5,8);(6,9);(7,9);(8,10);(9,11)
Algoritmos de Preenchimento
• Retângulo
for(y=ymin; y<=ymax; y++)for(x=xmin, x<=xmax; x++)
draw(x,y,color);
Algoritmos de Preenchimento
• PolígonosScanline
Passos
1) Encontrar as intersecções da scan line com as arestas do polígono
2) Ordenar as intersecções3) Preencher os pixels entre 2
intersecções (regra de paridade que inicia em par, muda quando encontra uma intersecção e escreve quando é impar)
Implemente !Implemente !
A B
E
F
C D
I
G
H
Algoritmos de Recorte
JK
L
Linhas
Trivialmente aceitoTrivialmente aceito
• Pontos dentro do recortePontos dentro do recorte
A B
E
F
C D
I
G
H
Algoritmos de Recorte
JK
L
Linhas
Trivialmente recusadoTrivialmente recusado
Pontos fora do recorte (acima/abaixo)Pontos fora do recorte (acima/abaixo) CCy < yi < yi
DDy < yi < yi
A B
E
F
I
G
H
Algoritmos de Recorte
JK
L
Linhas
Trivialmente recusadoTrivialmente recusado
Pontos fora do recorte (esquerda/direita)Pontos fora do recorte (esquerda/direita) HHx > xf > xf
JJx > xf > xf
A B
E
F
I
G
Algoritmos de Recorte
K
L
Linhas
RecorteRecorte Um ponto dentro outro foraUm ponto dentro outro fora• Os dois pontos estão fora mas:Os dois pontos estão fora mas:
P1P1x < xi e P2 < xi e P2x > xf > xf
ouou P1P1y < yi e P2 < yi e P2y > yf > yf
Ou ...Ou ...
Algoritmo de Cohen-Sutherland
• Atribuir códigos de 4 bits às regiões definidas pelas bordas da janela de visualização.
– Bit 0: esquerda
– Bit 1: direita
– Bit 2: abaixo
– Bit 3: acima
Algoritmo de Cohen-Sutherland
0000
10001001
0001
0101 0100
1010
0010
0110
Bit 0: esquerdaBit 1: direitaBit 2: abaixoBit 3: acima
• if(y > yf) seta primeiro bit em 1
• if(y < yi) seta segundo bit em 1
• if(x > xf) seta terceiro bit em 1
• if(x < xi) seta quarto bit em 1
Algoritmo de Cohen-Sutherland
Algoritmo de Cohen-Sutherland
A
B
C
D
E
F
G
H
I
JK L
Bit codes dos pontos:
A = 0001B = 1000C = 0000D = 0000E = 0000F = 1000G = 0000H = 0010I = 0001J = 0110K = 0101L = 0100
Algoritmo de Cohen-Sutherland
A
B
C
D
E
F
G
H
I
JK L
Como devem ser os bit codes dos pontos trivialmente aceitos?
P1 | P2 = 0000
Algoritmo de Cohen-Sutherland
A
B
C
D
E
F
G
H
I
JK L
Como devem ser os bit codes dos pontos trivialmente recusados?
(P1 & P2) ! = 0000
Algoritmo de Cohen-Sutherland
A
B
C
D
E
F
G
H
I
JK L
O que fazer com os que não são nem aceitos nem recusados?
Algoritmo de Cohen-Sutherland
A
B
C
D
E
F
G
H
I
JK L
O que fazer com os que não são nem aceitos nem recusados?
Calcular segmentos através das intersecções.
Algoritmo de Cohen-Sutherland
Internet
• Applet