Dieptebuffer

Uit Wikipedia, de vrije encyclopedie
Boven een driedimensionale voorstelling, onder de dieptebufferweergave

Een dieptebuffer, ook wel z-buffer genoemd, wordt in 3D computer graphics gebruikt om te bepalen welke delen van verschillende polygonen zichtbaar zijn, wanneer deze elkaar overlappen.

Bij een scanline renderer worden de hoekpunten van een polygoon naar 2D geprojecteerd, waarna het 2D polygoon wordt ingekleurd (eventueel met een texture, of geavanceerde pixel shaders). Een probleem dat zich hier voordoet, is dat als twee polygonen elkaar overlappen, wel moet gezorgd moet worden dat het goede polygoon op de voorgrond komt. Vroeger werd dit meestal opgelost door middel van het schildersalgoritme. Bij dit algoritme zorgt men ervoor dat de polygonen die verder weg liggen eerder getekend worden dan de polygonen die dichterbij liggen. De polygonen die dichterbij liggen, overschrijven dan de eerder getekende pixels.

Een andere oplossing voor dit probleem is een dieptebuffer, een stuk geheugen dat voor elke pixel van het te renderen beeld opslaat hoe ver die pixel van de camera af ligt. Als er dan op diezelfde pixel nog een polygoon getekend gaat worden, kijkt de renderer of de afstand van die nieuwe pixel wel dichterbij is dan de huidige pixel. Als dat zo is, wordt de nieuwe pixel getekend en wordt ook de waarde in de dieptebuffer aangepast. Als de nieuwe pixel verder weg ligt, wordt de oude pixel behouden. Op deze manier zijn altijd de polygonen die het dichtst bij de camera liggen, zichtbaar, zelfs als ze in een heel andere volgorde gerasterd worden.

Voordelen van een dieptebuffer[bewerken | brontekst bewerken]

  • Veruit de simpelste sorteermethode om te gebruiken.
  • Makkelijk te implementeren in hardware. Vrijwel elke grafische kaart ondersteunt het tegenwoordig

Nadelen van een dieptebuffer[bewerken | brontekst bewerken]

  • Kan geen transparante polygonen sorteren, dus transparante polygonen moeten nog steeds van achter naar voren getekend worden (schildersalgoritme)
  • Kost vrij veel geheugen.