Framebuffer: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) K |
(Hinweis auf GL_EXT_framebuffer_object) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Bevor das Bild, welches man rendert, auf dem Monitor sichtbar wird, wird es in den so genannten Framebuffer geschrieben. Im Framebuffer | + | Bevor das Bild, welches man rendert, auf dem Monitor sichtbar wird, wird es in den so genannten Framebuffer geschrieben. Im Framebuffer wird nicht nur die Farbe eines Bildpunktes gespeichert, sondern auch dessen Tiefe und/oder dessen Stencil-Wert. |
+ | |||
+ | Wenn ein Objekt gezeichnet wird, so muss sowohl der Tiefentest (welcher seine Daten vom [[Tiefenpuffer]] und von der Tiefe des zu prüfenden [[Fragment]]es bezieht) als auch der Stencil-Test (welcher seine Daten aus dem [[Schablonenpuffer]] und vom Stencil-Wert des zu prüfenden [[Fragment]]es bezieht) bestanden werden, damit die Daten im [[Farbpuffer]] landen. Der Tiefen- und Stencil-Test kann natürlich aktiviert oder deaktiviert werden. Voraussetzung für beide Tests ist aber natürlich das Vorhandensein der Puffer, welches durch das gewählte [[Pixelformat]] (gesetzt durch [[WGL ARB pixel format]] bzw. [[SetPixelFormat]]) gewährleistet sein muss. | ||
+ | |||
+ | Seit relativ kurzer Zeit steht die neue Extension [[GL_EXT_framebuffer_object]] zur Verfügung, mit der man schnell und komfortabel eigene Framebuffer anlegen und wieder auslesen kann, wodurch sich neue Anwendungsmöglichkeiten erschließen. | ||
− | |||
− | |||
==Die Bildentstehung im Framebuffer== | ==Die Bildentstehung im Framebuffer== | ||
− | Wenn ein Objekt gezeichnet wird, so wird der Colorbuffer an diesen Stellen | + | Wenn ein (das erste) Objekt gezeichnet wird, so wird der Colorbuffer an diesen Stellen beschrieben. Ebenso der [[Tiefenpuffer]]. Vor dem erneuten schreiben in den Framebuffer wird nun überprüft, ob die Tiefenkoordinaten der [[Fragment|Fragmente]] des neuen Objektes den [[Tiefentest]] bestehen (üblicherweise muss der Tiefenwert dafür kleiner - also näher - sein als der bereits existierende Wert im Framebuffer). Dieser Vorgang wiederholt sich bis alle Objekte gezeichnet wurden. Das Bild liegt nun fertig im Framebuffer und kann auf dem Bildschirm angezeigt werden. |
− | + | ||
+ | Ähnlich wie der [[Tiefenpuffer]] können auch die Stencil-Werte mit dem [[Schablonenpuffer]] verglichen werden. Das verhalten von beiden Tests kann mittels [[glDepthFunc]] bzw. [[glStencilFunc]] verändert werden. | ||
− | |||
Der Framebuffer funktioniert nach dem so genannten [[Doppelpufferung|Doublebuffering]]prinzip. | Der Framebuffer funktioniert nach dem so genannten [[Doppelpufferung|Doublebuffering]]prinzip. |
Aktuelle Version vom 18. Oktober 2006, 16:12 Uhr
Bevor das Bild, welches man rendert, auf dem Monitor sichtbar wird, wird es in den so genannten Framebuffer geschrieben. Im Framebuffer wird nicht nur die Farbe eines Bildpunktes gespeichert, sondern auch dessen Tiefe und/oder dessen Stencil-Wert.
Wenn ein Objekt gezeichnet wird, so muss sowohl der Tiefentest (welcher seine Daten vom Tiefenpuffer und von der Tiefe des zu prüfenden Fragmentes bezieht) als auch der Stencil-Test (welcher seine Daten aus dem Schablonenpuffer und vom Stencil-Wert des zu prüfenden Fragmentes bezieht) bestanden werden, damit die Daten im Farbpuffer landen. Der Tiefen- und Stencil-Test kann natürlich aktiviert oder deaktiviert werden. Voraussetzung für beide Tests ist aber natürlich das Vorhandensein der Puffer, welches durch das gewählte Pixelformat (gesetzt durch WGL ARB pixel format bzw. SetPixelFormat) gewährleistet sein muss.
Seit relativ kurzer Zeit steht die neue Extension GL_EXT_framebuffer_object zur Verfügung, mit der man schnell und komfortabel eigene Framebuffer anlegen und wieder auslesen kann, wodurch sich neue Anwendungsmöglichkeiten erschließen.
Die Bildentstehung im Framebuffer
Wenn ein (das erste) Objekt gezeichnet wird, so wird der Colorbuffer an diesen Stellen beschrieben. Ebenso der Tiefenpuffer. Vor dem erneuten schreiben in den Framebuffer wird nun überprüft, ob die Tiefenkoordinaten der Fragmente des neuen Objektes den Tiefentest bestehen (üblicherweise muss der Tiefenwert dafür kleiner - also näher - sein als der bereits existierende Wert im Framebuffer). Dieser Vorgang wiederholt sich bis alle Objekte gezeichnet wurden. Das Bild liegt nun fertig im Framebuffer und kann auf dem Bildschirm angezeigt werden.
Ähnlich wie der Tiefenpuffer können auch die Stencil-Werte mit dem Schablonenpuffer verglichen werden. Das verhalten von beiden Tests kann mittels glDepthFunc bzw. glStencilFunc verändert werden.
Der Framebuffer funktioniert nach dem so genannten Doublebufferingprinzip.