Farbpuffer: Unterschied zwischen den Versionen
Flo (Diskussion | Beiträge) K (→RGBA-Modus) |
Lyr (Diskussion | Beiträge) K (RGB_A_ ist meines Wissens nicht Pflicht und vor allem auf älteren Karten auch nicht so sehr in Hardware vertreten.) |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
<br> | <br> | ||
== Was ist der Farbpuffer? == | == Was ist der Farbpuffer? == | ||
− | Der Farbpuffer enthält die Farbinformationen | + | Der Farbpuffer enthält die Farbinformationen im [[Framebuffer]]. Gespeichert werden dazu je nach Modus entweder Indizes auf Paletteneinträgte (Index-Modus) oder Intensitäts-Werte der Pufferkomponenten (RGB(A)-Modus). |
+ | |||
+ | |||
− | |||
== Aufbau == | == Aufbau == | ||
=== RGBA-Modus === | === RGBA-Modus === | ||
− | Hat man einen Renderkontext mit mehr als 8-Bit Farbwerten (8-Bit = 256 Farben = Indexmodus) angefordert, bekommt man von OpenGL einen sog. RGBA-Farbpuffer (R=Rot, G=Grün, B=Blau, A=Alpha) zur verfügung gestellt. Der Farbpuffer besteht dann aus insgesamt 4 unabhängigen Puffern für jede | + | Hat man einen Renderkontext mit mehr als 8-Bit Farbwerten (8-Bit = 256 Farben = Indexmodus) angefordert, bekommt man von OpenGL einen sog. RGB- oder RGBA-Farbpuffer (R=Rot, G=Grün, B=Blau, A=Alpha) zur verfügung gestellt. Der Farbpuffer besteht dann aus insgesamt 3 oder 4 unabhängigen Puffern für jede RGB(A)-Komponente, deren Bit-Tiefe von der gewählten Farbtiefe abhängt. Im Normalfall (32-Bit Farbtiefe, 24 Bit für R+G+B und 8 Bit für A) besitzt jeder dieser Komponentenpuffer 8 Bitflächen, in denen die Intensität der entsprechenden Komponente als Ganzzahlwert abgelegt wird. Die Intensität reicht dabei von 0 (entspricht 0/255) bis 255 (entspricht 1.0, also volle Intensität). |
Die Alpha-Komponente kann mittels [[Blending]]/[[Alphamasking]] für verschiedene Transparenz-Effekte verwendet werden. | Die Alpha-Komponente kann mittels [[Blending]]/[[Alphamasking]] für verschiedene Transparenz-Effekte verwendet werden. | ||
Zeile 15: | Zeile 16: | ||
Dieser Modus wird heute nur noch sehr selten verwendet, denn 256-Palettenfarben sind inzwischen einfach viel zu wenig, aber mehr war damals aufgrund eingeschränkter Hardware einfach nicht machbar. In diesem Modus gibt man (im Normalfall beim Programmstart) eine Farbpalette an, in der sich alle benötigten Farbwerte befinden. Jeder dieser Farbwerte besitzt eine eindeutige Nummer, den Index. OpenGL schreibt in diesem Modus dann nicht die Intensität der Farbkomponente in den Farbpuffer, sondern einfach nur den Index dieser Farbe, so dass diese später referenziert werden kann. | Dieser Modus wird heute nur noch sehr selten verwendet, denn 256-Palettenfarben sind inzwischen einfach viel zu wenig, aber mehr war damals aufgrund eingeschränkter Hardware einfach nicht machbar. In diesem Modus gibt man (im Normalfall beim Programmstart) eine Farbpalette an, in der sich alle benötigten Farbwerte befinden. Jeder dieser Farbwerte besitzt eine eindeutige Nummer, den Index. OpenGL schreibt in diesem Modus dann nicht die Intensität der Farbkomponente in den Farbpuffer, sondern einfach nur den Index dieser Farbe, so dass diese später referenziert werden kann. | ||
− | + | ||
+ | |||
== Wichtige Funktionen == | == Wichtige Funktionen == | ||
Wie auch die anderen Buffer kann der Colorbuffer über die Funktion [[glClear]] und dem Parameter '''GL_COLOR_BUFFER_BIT''' mit einem Wert gefüllt werden. | Wie auch die anderen Buffer kann der Colorbuffer über die Funktion [[glClear]] und dem Parameter '''GL_COLOR_BUFFER_BIT''' mit einem Wert gefüllt werden. | ||
Zeile 21: | Zeile 23: | ||
Farbwerte für einzelne [[Eckpunkt|Eckpunkte]] übergibt man mittels [[glColor]]. | Farbwerte für einzelne [[Eckpunkt|Eckpunkte]] übergibt man mittels [[glColor]]. | ||
− | + | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
[[Tiefenpuffer]], [[Schablonenpuffer]], [[Akkumulationspuffer]] | [[Tiefenpuffer]], [[Schablonenpuffer]], [[Akkumulationspuffer]] |
Aktuelle Version vom 12. Juli 2006, 04:39 Uhr
Inhaltsverzeichnis
Was ist der Farbpuffer?
Der Farbpuffer enthält die Farbinformationen im Framebuffer. Gespeichert werden dazu je nach Modus entweder Indizes auf Paletteneinträgte (Index-Modus) oder Intensitäts-Werte der Pufferkomponenten (RGB(A)-Modus).
Aufbau
RGBA-Modus
Hat man einen Renderkontext mit mehr als 8-Bit Farbwerten (8-Bit = 256 Farben = Indexmodus) angefordert, bekommt man von OpenGL einen sog. RGB- oder RGBA-Farbpuffer (R=Rot, G=Grün, B=Blau, A=Alpha) zur verfügung gestellt. Der Farbpuffer besteht dann aus insgesamt 3 oder 4 unabhängigen Puffern für jede RGB(A)-Komponente, deren Bit-Tiefe von der gewählten Farbtiefe abhängt. Im Normalfall (32-Bit Farbtiefe, 24 Bit für R+G+B und 8 Bit für A) besitzt jeder dieser Komponentenpuffer 8 Bitflächen, in denen die Intensität der entsprechenden Komponente als Ganzzahlwert abgelegt wird. Die Intensität reicht dabei von 0 (entspricht 0/255) bis 255 (entspricht 1.0, also volle Intensität). Die Alpha-Komponente kann mittels Blending/Alphamasking für verschiedene Transparenz-Effekte verwendet werden.
Wenn man sich unter Windows ein Pixelformat besorgt, werden die Bits aus cColorBits auf Rot, Grün und Blau verteilt. Der Wert von cAlphaBits gibt dagegen die Bits für den Alpha Kanal an.
Index-Modus
Dieser Modus wird heute nur noch sehr selten verwendet, denn 256-Palettenfarben sind inzwischen einfach viel zu wenig, aber mehr war damals aufgrund eingeschränkter Hardware einfach nicht machbar. In diesem Modus gibt man (im Normalfall beim Programmstart) eine Farbpalette an, in der sich alle benötigten Farbwerte befinden. Jeder dieser Farbwerte besitzt eine eindeutige Nummer, den Index. OpenGL schreibt in diesem Modus dann nicht die Intensität der Farbkomponente in den Farbpuffer, sondern einfach nur den Index dieser Farbe, so dass diese später referenziert werden kann.
Wichtige Funktionen
Wie auch die anderen Buffer kann der Colorbuffer über die Funktion glClear und dem Parameter GL_COLOR_BUFFER_BIT mit einem Wert gefüllt werden. Dieser Farbwert wird mit Hilfe der Funktion glClearColor definiert. Farbwerte für einzelne Eckpunkte übergibt man mittels glColor.