![]() |
|
| |
|||
| Beschreibung | Der z-Buffer Algorithmus oder Tiefenpuffer-Algorithmus dient zur Ermittlung sichtbarer Flächen mit Bildgenauigkeit. Er benötigt neben dem Bildwiederholspeicher (frame buffer) einen weiteren Speicher, den z-Buffer, der zu jedem Pixel des Bildschirms einen z-Wert speichert. Der Bildwiederholspeicher wird zu Beginn mit der Hintergrundfarbe initialisiert. Der z-Buffer wird entsprechend der hinteren Kappungsebene mit Null initialisiert. Der Algorithmus vergleicht dann die z-Werte der einzelnen Polygone mit den Werten des z-Buffers. Dabei wird für jeden einzelnen Punkt (x,y) des Polygons ermittelt ob er näher am Betrachter liegt als der Punkt, dessen Farb- und Tiefenwerte gerade im Bildwiederholspeicher und z-Buffer stehen. Ist dies der Fall, dann werden die Farb- und Tiefeninformationen in den Speichern von den Werten des neuen Punktes ersetzt. Jedes Polygon wird so Punkt für Punkt, bzw. Pixel für Pixel durchlaufen, und dann gezeichnet, wenn es näher am Betrachter liegt als die vorher untersuchten. Dabei ist die Reihenfolge der zu untersuchenden Polygone egal. Sind alle Polygone untersucht worden, stehen im Bildwiederholspeicher und z-Buffer die Werte der Polygone, die vom Betrachter aus gesehen werden können.
|
||
![]()
|
Es folgt ein z-Buffer Algorithmus in Pseudocode, der zuerst den Frame-Buffer und den z-Buffer initialisiert, dann drei vorgegebene Polygone untersucht und den Frame-Buffer und den z-Buffer entsprechend ändert. Das Ergebnis, daß erreicht werden soll, entspricht dem Bild links. Da der Algorithmus auf Pixelebene arbeitet, wird das Bild gerastert.
|
||
|
z-Buffer Algorithmus
|
|||
|
Bei der Berechnung der einzelnen z-Werte der Polygone kann die Tiefenkohärenz ausgenutzt werden, und der nächste z-Wert mit Hilfe des davor berechneten z-Wertes plus der Änderung des z-Wertes in x- bzw. y-Richtung bestimmt werden. Eine Effizienzverbesserung kann auch dadurch erreicht werden, daß zu Beginn die Polygone grob nach wachsender Tiefe sortiert werden. So kann die Anzahl der Schreiboperationen auf den z-Buffer und den Bildwiederholspeicher verringert werden. |
|||
| |
|||
| Effizienz / Funktion | Der z-Buffer Algorithmus ist sehr einfach zu implementieren. Er benötigt jedoch einen relativ großen Speicherplatz zur Speicherung der z-Werte der einzelnen Pixel. Da der Algorithmus mit Bildgenauigkeit arbeitet ist er anfällig für Aliasing. Ein weiteres Problem des z-Buffer Algorithmus ist die begrenzte Genauigkeit der z-Werte. Dieses Problem kann z.B. dann auftreten, wenn bei einer CAD-Anwendung ein bis auf den Millimeter genau definiertes Objekt in kilometerweiter Entfernung plaziert werden soll. Je nach dem in welcher Richtung das Bild untersucht wird, kann es durch die begrenzte Genauigkeit unterschiedliche Ergebnisse geben, wenn z.B. zwei Polygone annähernd gleiche z-Werte an einer gemeinsamen Kante besitzen. Durch Rundungsfehler können gleiche z-Werte berechnet werden, und je nach dem in welcher Richtung das Bild abgearbeitet wird, wird entweder das eine oder das andere Polygon an dieser Kante dargestellt. |
![]() |