Framebuffer

Aus DGL Wiki
Version vom 4. Juli 2004, 22:53 Uhr von Magellan (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Bevor das Bild, welches man rendert, auf dem Monitor sichtbar wird, wird es in den so genannten Framebuffer der OpenGL geschrieben. Im Framebuffer liegen die Grafikdaten als Fragmente vor.

Der Framebuffer erhält die verschiedenen Daten der Fragmente aus unterschiedlichen Buffern. Die Bilddaten des gezeichneten Objektes werden in den Colorbuffer (Farbpuffer) geschrieben. Gleichzeitig gelangen auch die Tiefenkoordinaten des Objektes an den bestimmten Bildpunkten in den so genannten Depthbuffer (Tiefenpuffer). Dies geschieht jedoch nur, wenn man zuvor den Tiefentest aktiviert hat. Nun gelangen die Farbwerte aus dem Colorbuffer und die Tiefenwerte aus dem Depthbuffer in den Framebuffer. Hier werden diese Daten in den entsprechenden Fragmenten abgelegt.

Die Bildentstehung im Framebuffer

Wenn ein Objekt gezeichnet wird, so wird der Colorbuffer an diesen Stellen komplett überschrieben. Ebenso der Depthbuffer. Beim erneuten Schreiben in den Framebuffer wird nun überprüft, ob die Tiefenkoordinaten des neuen Objektes an den einzelnen Bildpunkten größer sind, als die Tiefenwerte der einzelnen Fragmente im Framebuffer. Dieser Vorgang wird auch als Tiefentest bezeichnet. Besteht ein Fragment den Tiefentest, dann wird das alte Objekt von dem Neuen verdeckt und es werden die Daten aus Colorbuffer und Depthbuffer in den Framebuffer geschrieben. Dieser Vorgang wiederholt sich, bis alle Objekte gezeichnet wurden. Das Bild liegt nun fertig im Framebuffer und kann auf dem Bildschirm angezeigt werden. Das Verhalten des Depthbuffer kann selbstverständlich auch geändert werden. Dies ist mit Hilfe des Befehls glDepthFunc möglich.

Die OpenGL bietet noch weitere Buffer (z.B. den Stencilbuffer), welche die Bildentstehung im Framebuffer beeinflussen können. Der Framebuffer funktioniert nach dem so genannten Doublebufferingprinzip.