Não acenda um pixel duas vezes! Use o buffer Z.

Eis uma técnica para plotar pixels numa tela, quando se têm pixels sobrepostos, de forma que um pixel será plotado apenas uma vez. Considere a figura abaixo:

Aqui temos dois retângulos, um avermelhado e um azul. O “plano de projeção” é a sua tela e esses retângulos têm, além de comprimento (width) e altura (height), também “profundidade” (depth). A profundidade é dada pela componente Z do plano onde o retângulo se encontra: Quanto mais perto da tela, maior o Z.

Repare que temos uma “matriz” que contém apenas os valores de Z dos pixels de cada retângulo. Essa matriz é chamada de “buffer Z” ou “buffer de profundidade” (depth buffer). E funciona assim: Antes de pensarmos em desenhar qualquer coisa no plano de projeção (tela), zeramos todo o buffer Z. Sabemos qual é a ordem em que os retângulos a serem desenhados se encontram no espaço (veremos como fazer isso em outro artigo) e, portanto, selecionamos o que está mais perto da tela (o vermelho)… A cada pixel plotado do retângulo vermelho, comparamos o seu valor Z eom o valor Z que consta no buffer Z. Se Z_{retangulo} > Z_{buffer}, para a posição (x,y) correspondente, plotamos o pixel e atualizamos a posição (x,y) no buffer Z… Se Z_{retangulo} <= Z_{buffer}, não plotamos e não atualizamos o buffer Z.

No fim das contas, os retângulos mais próximos da tela serão completamente plotados, mas os que estão mais atrás, terão apenas os pixels que não estejam à frente de outros retângulos plotados. Ou seja, o buffer Z funciona como uma máscara!

No caso da confecção de uma GUI onde lidamos apenas com figuras geométricas simples (retângulos) e que não tenham rotações em torno dos eixos X e Y, a técnica funciona perfeitamente bem.

Anúncios