Preenchimento de polígonos & recorte de linhas Prof. MSc. João Ricardo Bittencourt Update: 09 Out. 2007 [email protected] Processamento Gráfico Desenvolvimento de Jogos & Entretenimento Digital UNISINOS Sumário 1. 2. Preenchimento de polígonos Boundary Fill Flood Fill Scan line Recorte Recorte de pontos Recorte de linhas •Algoritmo de Cohen-Sutherland Preenchimento de Polígonos Dado um polígono qualquer como este deve ser preenchido? Quais os pixels deverão ser coloridos? Preenchimento de Polígonos Problemas Algoritmos caros computacionalmente Compartilhamento da mesma aresta • Perde de tempo no preenchimento Só pintar os pontos que estão dentro do polígono • E como fica quem está na borda? Evitar repinturas Boundary Fill Algoritmo Define uma semente no interior da figura Procura na esquerda e na direita Quando os pixels da esquerda e da direita são atingindos, pinta uma linha Depois tenta na linha de cima e depois na linha de baixo Até todos os pontos estarem preenchidos Flood Fill Algoritmo Define uma semente no interior da figura Procura na esquerda e na direita Inspeciona todos os pixels adjacentes até toda a área ao redor do pixel estiver preenchida Até todos os pontos estarem preenchidos Vídeo Scan line ymax ymin Scan line Algoritmo Define ymax e ymin Para cada aresta calcula as intersecções Ordena as intersecções em relação a x Desenha as linhas horizontais Vídeo Recorte de Pontos Trivial de ser resolvido Pinta somente os pontos que estão dentro da área Dado P(x,y) ele será cortado se: Xi >= x >=Xf Yi >= y >=Yf Recorte de Linhas Caso 1 – Trivialmente Aceito Os dois pontos estão dentro da área Recorte de Linhas Caso 2 – Trivialmente Rejeitado Os dois pontos estão fora da área Recorte de Linhas Caso 3 – Necessita recorte Recorte de Linhas Caso 3 – Necessita recorte Acima Abaixo Direita Esquerda 1001 1000 1010 0001 0000 0010 0101 0100 0110 Algoritmo de Cohen-Sutherland Recorte de Linhas 1001 AND 1010 1000 !=0 Rejeita Caso 3 – Necessita recorte 1001 A 1000 1010 0001 0000 0010 0101 0100 0110 B Algoritmo de Cohen-Sutherland Recorte de Linhas Caso 3 – Necessita recorte 1001 1000 1010 0000 0010 0000 OR 0000 0000 ==0 Aceita A 0001 B 0101 0100 0110 Algoritmo de Cohen-Sutherland Recorte de Linhas Caso 3 – Necessita recorte 1001 1000 A 0001 0000 0010 0101 0100 0110 B 1010 1000 AND 0100 0000 !=0 Tem que cortar Algoritmo de Cohen-Sutherland Links Applets de Demonstração (Veja na web) Boundary Fill • http://www.algana.co.uk/Algorithms/Graphics/BoundaryFill/BoundaryFill.html Active Edge List (variação do Scan Line) • http://www.cse.unsw.edu.au/~cs3421/slides/bres/ScanLine.html Cohen-Sutherland • http://www.utdallas.edu/~axe021000/Projects1/CohenSuther/CohenSutherlandDem onstration.html