glAccum: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) K |
K (Ergebniss -> Ergebnis) |
||
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 10: | Zeile 10: | ||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glAccum'''(''op'' : GLenum; ''value'' : GLfloat); | procedure '''glAccum'''(''op'' : GLenum; ''value'' : GLfloat); | ||
− | |||
Zeile 32: | Zeile 31: | ||
Mit Hilfe des Accumulation-Buffers lassen sich z.B. Effekte wie Antialiasing, Bewegungs- und Tiefenunschärfe erzeugen, indem man Szenen mehrmals mit unterschiedlichen Transformationsmatritzen rendert und im Accumulation-Buffer kombiniert. | Mit Hilfe des Accumulation-Buffers lassen sich z.B. Effekte wie Antialiasing, Bewegungs- und Tiefenunschärfe erzeugen, indem man Szenen mehrmals mit unterschiedlichen Transformationsmatritzen rendert und im Accumulation-Buffer kombiniert. | ||
− | Jeder Pixel im Accumulation-Buffer enthält Rot-, Grün-, Blau- und Alphawerte | + | Jeder Pixel im Accumulation-Buffer enthält Rot-, Grün-, Blau- und Alphawerte im Bereich von 0 bis 1. Dabei bilden die Pixel im Accumulation-Buffer eins zu eins auf die Pixel im Framebuffer ab. |
Folgende Funktionsmodi gibt es für den Accumulation-Buffer: | Folgende Funktionsmodi gibt es für den Accumulation-Buffer: | ||
Zeile 38: | Zeile 37: | ||
'''GL_ACCUM''' | '''GL_ACCUM''' | ||
− | :Nimmt Farbwerte (RGBA) aus dem gegenwärtig per [[glReadBuffer]] selektierten Color-Buffer und bildet die Farbwerte aus dem Intervall [0, 255]* | + | :Nimmt Farbwerte (RGBA) aus dem gegenwärtig per [[glReadBuffer]] selektierten Color-Buffer und bildet die Farbwerte aus dem Intervall [0, 255]* auf Fließkommzahlen im Intervall [0,1] ab. (Und zwar linear, wobei 0 bestehen bleibt und 255 zu 1 wird.) |
:Jeder Farbwert wird nun mit dem beim Aufruf von [[glAccum]] als ''value'' übergebenen Wert multipliziert und zur entsprechenden Pixelkomponente im Accumulation-Buffer hinzugefügt. | :Jeder Farbwert wird nun mit dem beim Aufruf von [[glAccum]] als ''value'' übergebenen Wert multipliziert und zur entsprechenden Pixelkomponente im Accumulation-Buffer hinzugefügt. | ||
Zeile 60: | Zeile 59: | ||
Um den Accumulation-Buffer zu löschen, kann der Befehl [[glClear]] benutzt werden. Mit [[glClearAccum]] lassen sich die beim Löschen geschriebenen Farbwerte festlegen. | Um den Accumulation-Buffer zu löschen, kann der Befehl [[glClear]] benutzt werden. Mit [[glClearAccum]] lassen sich die beim Löschen geschriebenen Farbwerte festlegen. | ||
− | + | {{Warnung|Wenn das Ergebnis der vom Accumulation-Buffer berechneten Farbwerte außerhalb des Bereichs zwische -1 und +1 liegen, ist nicht definiert, was in den Accumulation-Buffer geschrieben wird. Hier wird also nicht notwendigerweise geclampt!}} | |
− | |||
− | |||
Zeile 69: | Zeile 66: | ||
[[Kategorie:GL|Accum]] | [[Kategorie:GL|Accum]] | ||
---- | ---- | ||
+ | |||
+ | ==Hinweise== | ||
+ | Nur die Pixel innerhalb der Scissor-Box werden beachtet. Diese lässt sich mit [[glScissor]] setzen. | ||
+ | |||
+ | |||
+ | |||
+ | ==Zugehörige Wertrückgaben== | ||
+ | [[glGet]] mit dem Token [[glGet#GL_ACCUM_RED_BITS|GL_ACCUM_RED_BITS]] | ||
+ | |||
+ | [[glGet]] mit dem Token [[glGet#GL_ACCUM_GREEN_BITS|GL_ACCUM_GREEN_BITS]] | ||
+ | |||
+ | [[glGet]] mit dem Token [[glGet#GL_ACCUM_BLUE_BITS|GL_ACCUM_BLUE_BITS]] | ||
+ | |||
+ | [[glGet]] mit dem Token [[glGet#GL_ACCUM_ALPHA_BITS|GL_ACCUM_ALPHA_BITS]] | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
− | '''GL_INVALID_ENUM''' wird ausgelöst wenn ''op'' einen ungültigen Wert besitzt. | + | '''GL_INVALID_ENUM''' wird ausgelöst, wenn ''op'' einen ungültigen Wert besitzt. |
− | '''GL_INVALID_OPERATION''' wird ausgelöst, wenn es keinen Accumulation-Buffer gibt oder der Befehl innerhalb eines glBegin/glEnd Blocks aufgerufen wird. | + | |
+ | '''GL_INVALID_OPERATION''' wird ausgelöst, wenn es keinen Accumulation-Buffer gibt oder der Befehl innerhalb eines [[glBegin|glBegin/glEnd]]-Blocks aufgerufen wird. | ||
Zeile 79: | Zeile 92: | ||
== Siehe auch == | == Siehe auch == | ||
[[glBegin]], [[glBlendFunc]], [[glClear]], [[glClearAccum]], [[glCopyPixels]], [[glEnd]], [[glGet]], [[glLogicOp]], [[glPixelStore]], [[glPixelTransfer]], [[glReadBuffer]], [[glReadPixels]], [[glScissor]], [[glStencilOp]] | [[glBegin]], [[glBlendFunc]], [[glClear]], [[glClearAccum]], [[glCopyPixels]], [[glEnd]], [[glGet]], [[glLogicOp]], [[glPixelStore]], [[glPixelTransfer]], [[glReadBuffer]], [[glReadPixels]], [[glScissor]], [[glStencilOp]] | ||
− | |||
[[Kategorie:GL|Accum]] | [[Kategorie:GL|Accum]] | ||
+ | [[Kategorie:GL1.0|Accum]] |
Aktuelle Version vom 20. März 2012, 15:30 Uhr
Inhaltsverzeichnis
glAccum
Name
glAccum spezifiziert die Betriebsart des Accumulation-Buffers.
Delphi-Spezifikation
procedure glAccum(op : GLenum; value : GLfloat);
Parameter
op | Bestimmt die Betriebsart des Accumulation-Buffers.
Es werden die folgenden fünf symbolischen Konstanten aktzeptiert: GL_ACCUM, GL_LOAD, GL_ADD, GL_MULT, GL_RETURN |
---|---|
value | Eine Fließkommazahl, die je nach Betriebsart (op) des Accumulation-Buffers unterschiedlich verwendet wird. |
Beschreibung
Der Accumulation-Buffer ist ein erweiterter Color-Buffer. Allerdings wird nicht direkt in den Accumulation-Buffer gerendert. Stattdessen wird nach dem Rendern in einen Color-Buffer der Inhalt des Accumulation-Buffers geändert, wobei die Betriebsart des Accumulation-Buffers darüber entscheidet, wie dies genau geschieht. Mit Hilfe des Accumulation-Buffers lassen sich z.B. Effekte wie Antialiasing, Bewegungs- und Tiefenunschärfe erzeugen, indem man Szenen mehrmals mit unterschiedlichen Transformationsmatritzen rendert und im Accumulation-Buffer kombiniert.
Jeder Pixel im Accumulation-Buffer enthält Rot-, Grün-, Blau- und Alphawerte im Bereich von 0 bis 1. Dabei bilden die Pixel im Accumulation-Buffer eins zu eins auf die Pixel im Framebuffer ab.
Folgende Funktionsmodi gibt es für den Accumulation-Buffer:
GL_ACCUM
- Nimmt Farbwerte (RGBA) aus dem gegenwärtig per glReadBuffer selektierten Color-Buffer und bildet die Farbwerte aus dem Intervall [0, 255]* auf Fließkommzahlen im Intervall [0,1] ab. (Und zwar linear, wobei 0 bestehen bleibt und 255 zu 1 wird.)
- Jeder Farbwert wird nun mit dem beim Aufruf von glAccum als value übergebenen Wert multipliziert und zur entsprechenden Pixelkomponente im Accumulation-Buffer hinzugefügt.
GL_LOAD
- Die Berechnung läuft wie bei GL_ACCUM, nur das am Ende die Farbwerte nicht zu den bereits im Accumulation-Buffer stehenden, hinzuaddiert werden sondern diese überschreiben.
GL_ADD
- Zu jeder im Accumulation-Buffer stehenden Farbkomponente wird value hinzuaddiert.
GL_MULT
- Jede im Accumulation-Buffer stehenden Farbkomponente wird mit value multipliziert.
GL_RETURN
- Funktioniert wie GL_ACCUM nur andersrum: Die Farbwerte des Accumulation-Buffers werden mit value multipliziert, auf das Intervall [0, 255]* abgebildet (und dabei u.U. geclampt) und in den gerade aktiven Color-Buffer geschrieben.
Um den Accumulation-Buffer zu löschen, kann der Befehl glClear benutzt werden. Mit glClearAccum lassen sich die beim Löschen geschriebenen Farbwerte festlegen.
*) Dieses Intervall bezieht sich auf 32bit Fartiefe, die heutzutage wohl als Standard angesehen werden darf. Bei 16bit Farbtiefe sieht der Bereich natürlich anders aus.
Hinweise
Nur die Pixel innerhalb der Scissor-Box werden beachtet. Diese lässt sich mit glScissor setzen.
Zugehörige Wertrückgaben
glGet mit dem Token GL_ACCUM_RED_BITS
glGet mit dem Token GL_ACCUM_GREEN_BITS
glGet mit dem Token GL_ACCUM_BLUE_BITS
glGet mit dem Token GL_ACCUM_ALPHA_BITS
Fehlermeldungen
GL_INVALID_ENUM wird ausgelöst, wenn op einen ungültigen Wert besitzt.
GL_INVALID_OPERATION wird ausgelöst, wenn es keinen Accumulation-Buffer gibt oder der Befehl innerhalb eines glBegin/glEnd-Blocks aufgerufen wird.
Siehe auch
glBegin, glBlendFunc, glClear, glClearAccum, glCopyPixels, glEnd, glGet, glLogicOp, glPixelStore, glPixelTransfer, glReadBuffer, glReadPixels, glScissor, glStencilOp