Documente Academic
Documente Profesional
Documente Cultură
Captulo 4
Polgonos
Operao fundamental em computao grfica Polgono dado por uma lista de vrtices
ltimo vrtice = primeiro vrtice
Retngulos
Para preencher um retngulo com uma nica cor, pinta-se cada pixel dentro de uma linha de varredura da esquerda para a direita com o mesmo valor de pixel, isto , pode-se preencher cada bloco de xmin a xmax. Algoritmo
Para y = ymin at ymax do retngulo { Por linha de varredura } Para x = xmin at xmax { Cada pixel dentro do bloco} escreva_pixel(x,y,valor)
Questes
Na Figura Anterior, a lista ordenada de coordenadas x (2, 4.5, 8.5, 13) para a linha de varredura 8. H 4 pontos a serem discutidos sobre este passo: I Se a interseco um valor fracionrio, como determinar qual o pixel que dever ser tomado para que fique interior ao polgono? O valor dever ser arredondado de forma a que o ponto fique dentro do polgono.
Se estamos dentro do polgono (paridade mpar) e atingimos uma interseco fracionria pela direita, arredondamos a coordenada x da interseco para baixo; se estamos fora do polgono arredondamos para cima.
Questes
II Como tratar o caso de interseco com coordenadas inteiras? Pode-se utilizar o critrio visto anteriormente, para evitar conflitos entre lados compartilhados em retngulos.
Se a coordenada x de um pixel mais a esquerda de um bloco (span) inteira ele definido como interno; se a coordenada x do pixel mais a direita de um bloco inteira, ele definido como externo ao polgono.
Questes
III Como tratar o caso II para vrtices que so compartilhados por mais de uma aresta do polgono? Usamos a tcnica de paridade. Ou seja, contamos o vrtice de ymin de um lado para alterar a paridade, mas no contamos o vrtice de ymax, dessa forma o vrtice de ymax desenhado somente se ele o vrtice de ymin do lado adjacente. Por exemplo, na Figura, o vrtice A contado uma vez na clculo de paridade porque o vrtice de ymin para o lado FA, mas tambm o vrtice de ymax para o lado AB. Assim ambos os lados e blocos so tratados como intervalos que so fechados em seu valor minimo e abertos em seu valor mximo.
Questes
IV Como tratar o caso especial de II em que os vrtices definem uma linha horizontal? Assim como no caso dos retngulos, arestas horizontais inferiores so traadas, e arestas horizontais superiores no so. Isso acontece automaticamente se no contarmos os vrtices dessas arestas no clculo da paridade, o que natural, j que eles no correspondem a vrtices ymin ou ymax.
Arestas Horizontais
Tratamento dos lados horizontais de um polgono.
Arestas Horizontais
OBSERVAES:
O algoritmo anterior contempla polgonos que possuem auto-interseco. Mas no desenha os pixels das arestas superiores nem os das arestas direita No desenha os pixels sobre o topo interno de um polgono cncavo em formato de U. No desenha os pixels que so pontos mximos locais. Neste algoritmo, em vez de escrever pixels em lugares errados, pixels no so escritos (mesmo em seus lugares certos!).
Preenchimento de Polgonos
Algoritmo clssico usa tcnica de varredura
Arestas so ordenadas
Chave primria: y mnimo Chave secundria: x mn. Exemplo: (e,d,a,b,c)
y ymax a b c d e ymin x
Linha de varredura perpendicular ao eixo y percorre o polgono (desde ymin at ymax) Intervalos horizontais entre pares de arestas so preenchidos
Rasterizao de Polgonos
Intervalos de preenchimento
Definidos sobre a linha de varredura Cada intervalo comea e termina sobre um pixel interceptado por uma aresta
Primeiro pixel pintado, ltimo no
Arestas horizontais no so consideradas Um vrtice de uma aresta no horizontal considerado apenas se for o vrtice com menor y
Lista de Arestas arestas do polgono Lista de Arestas Ativas arestas do polgono que interceptam linha de varredura corrente
16
Preenchimento de Regies
No propriamente rasterizao uma vez que operao se d no espao da imagem Regies so definidas por critrios de vizinhana a um pixel dado (semente)
4-conexa (borda 8-conexa) 8-conexa (borda 4-conexa)
Exemplo:
Pixels com cor semelhante semente
Borda tem cor diferente
17
Algoritmo de Preenchimento
Conhecido como Flood Fill Algoritmo recursivo
Preenche vizinhos da semente que atendem ao critrio Aplica o algoritmo recursivamente tomando esses vizinhos como sementes Termina quando nenhum vizinho atende o critrio
18
Algoritmo de Preenchimento
Pseudo-cdigo:
Procedure FloodFill (x, y, cor, novaCor) Se pixel (x, y) = cor ento pixel (x, y) novaCor FloodFill (x + 1, y, cor , novaCor) FloodFill (x, y + 1, cor , novaCor) FloodFill (x - 1, y, cor , novaCor) FloodFill (x, y - 1, cor , novaCor)
Uso abusivo de recurso pode ser contornado preenchendo intervalos horizontais iterativamente Pode ser necessrio usar um bitmap auxiliar para marcar os pixels visitados. Por exemplo
Critrio pixel (x, y) cor Se cor novaCor, no h meio de distinguir um pixel visitado de um no visitado 19