1. Explique o funcionamento básico do algoritmo do Z-buffer.

Passo 1

O enunciado pede uma explicação do funcionamento básico do algoritmo do Z-buffer, que é uma técnica de ocultamento de superfícies (hidden surface removal) em computação gráfica. Vamos ver como usamos um buffer de profundidade para decidir, pixel a pixel, quais superfícies aparecem na cena final.

Passo 2

Em cenas 3D, vários polígonos podem projetar-se sobre o mesmo pixel da tela, e precisamos saber qual deles está mais próximo da câmera. A ideia central do Z-buffer é associar a cada pixel um valor de profundidade (distância até a câmera) e usar esse valor para aceitar ou rejeitar fragmentos durante a rasterização.

Passo 3

Inicializamos dois buffers do tamanho da imagem:
  1. O color buffer (framebuffer), que armazena a cor final de cada pixel.
  2. O Z-buffer (depth buffer), que armazena a menor profundidade já vista em cada pixel.
    No início, preenchemos o color buffer com a cor de fundo e o Z-buffer com um valor grande, tipicamente \infty.

Passo 4

Para cada primitiva (geralmente um triângulo) da cena:
  1. Projetamos seus vértices no plano da tela e obtém-se coordenadas de tela e profundidades nos vértices.
  2. Rasterizamos o triângulo, gerando fragmentos para cada pixel interno.
  3. Para cada fragmento, interpolamos a profundidade \,z_{\text{frag}}.
  4. Comparamos \,z_{\text{frag}} com o valor atual em Z-buffer nesse pixel:
  • Se \,z_{\text{frag}} < z_{\text{buffer}}, o fragmento está mais próximo: atualizamos o color buffer com a cor do fragmento e gravamos \,z_{\text{frag}} no Z-buffer.
  • Caso contrário, descartamos o fragmento e não mexemos em nenhum buffer.

Passo 5

Depois de processar todas as primitivas, o color buffer contém a cor visível de cada pixel, respeitando o ocultamento de superfícies mais distantes. É assim que o Z-buffer gera a imagem final com as superfícies mais próximas sobrepondo as outras.

Resposta

O algoritmo do Z-buffer mantém, para cada pixel, um valor de profundidade no Z-buffer e uma cor no color buffer. Inicialmente, o Z-buffer é preenchido com \infty e o color buffer com a cor de fundo. Para cada fragmento gerado na rasterização de uma primitiva, calcula-se sua profundidade e compara-se com o valor armazenado no Z-buffer daquele pixel. Se o fragmento estiver mais próximo, atualiza-se o Z-buffer com a nova profundidade e o color buffer com a cor do fragmento; caso contrário, o fragmento é descartado. Ao final, o color buffer mostra a cena corretamente ocultando as superfícies mais distantes.

Exercícios relacionados