Algoritmo do pintor

O algoritmo do pintor é uma das soluções mais simples para o problema de visibilidade em gráficos de computador a 3D. Quando se pretende projectar uma cena a 3D num plano a 2D, é a dado ponto necessário decidir que polígonos estão visíveis e quais os que estão escondidos.

Objetos sobrepostos podem provocar a falha do algoritmo

Exemplo editar

 
Para uma paisagem, pinta-se primeiro as montanhas do fundo, em seguida o prado e somente depois os objetos mais próximos como as árvores
  Este artigo sobre matemática é um esboço. Você pode ajudar a Wikipédia expandindo-o.

O nome algoritmo do pintor se refere a um pintor simples que pinta as partes distantes de uma cena primeiro e então as cobre com as partes mais próximas. Similarmente, o algoritmo do pintor classifica todos os polígonos por sua profundidade e então os pinta nessa ordem. Ele sobrepõe as partes não são normalmente visíveis e então resolve o problema da invisibilidade.

 
As montanhas distantes são pintadas primeiro, seguidas pelos campos próximos; finalmente, os objetos mais próximos nessa cena - as árvores - são pintadas.
 
Polígonos sobrepostos podem causar uma falha no algoritmo

O algoritmo pode falhar em certos casos. Nesse exemplo os polígonos A, B e C se sobrepõe. Não é possível definir qual polígono está sobre os outros ou quando dois polígonos se interceptam em três dimensões.

Em implementações básicas, o algoritmo do pintor pode ser ineficiente. Ele força o sistema a renderizar cada ponto de cada polígono no campo visual, mesmo que o polígono seja ocultado na cena final. Isso significa que, para cenas detalhadas, o algoritmo do pintor é uma solução ineficiente.

Essa e outras falhas com o algoritmo levaram ao desenvolvimento de técnicas Z-buffer, que podem ser vistas como um desenvolvimento do algoritmo do pintor por resolver conflitos de profundidade numa base de pixel por pixel, reduzindo a necessidade de uma renderização baseada em profundezas. Mesmo em tais sistemas, uma variante da algoritmo do pintor é às vezes empregada. como implementações Z-buffer geralmente contam com registros de buffer de profundeza de precisão fixa implementado no hardware, há escopo para problemas de visibilidade devido a erros de arredondamento. Esses erros são sobreposições ou espaços nas junções entre polígonos. Para evitá-los, algumas implementações da engine gráfica "overrender" - desenhando as bordas afetadas de ambos polígonos na ordem pelo algoritmo do pintor. Isso significa que alguns pixels são desenhados duas vezes (como no algoritmo do pintor completo), mas isso acontece apenas em pequenas partes da imagem e tem um efeito neglicenciável na performance.