glAccum: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(fehlerhaftes HTML durch Wiki Syntax ersetzt)
K (Beschreibung: Einrückung)
Zeile 38: Zeile 38:
 
'''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]* in auf Fließkommzahlen im Intervall [0,1] ab. (Und zwar linear, wobei die 0 so bleibt und 255 zu 1 wird.)
+
:Nimmt Farbwerte (RGBA) aus dem gegenwärtig per [[glReadBuffer]] selektierten Color-Buffer und bildet die Farbwerte aus dem Intervall [0, 255]* in auf Fließkommzahlen im Intervall [0,1] ab. (Und zwar linear, wobei die 0 so 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.
  
 
'''GL_LOAD'''
 
'''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.
+
: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'''
 
'''GL_ADD'''
  
Zu jeder im Accumulation-Buffer stehenden Farbkomponente wird ''value'' hinzuaddiert.
+
:Zu jeder im Accumulation-Buffer stehenden Farbkomponente wird ''value'' hinzuaddiert.
  
 
'''GL_MULT'''
 
'''GL_MULT'''
  
Jede im Accumulation-Buffer stehenden Farbkomponente wird mit ''value'' multipliziert.
+
:Jede im Accumulation-Buffer stehenden Farbkomponente wird mit ''value'' multipliziert.
  
 
'''GL_RETURN'''
 
'''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.
+
: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.
 
Um den Accumulation-Buffer zu löschen, kann der Befehl [[glClear]] benutzt werden. Mit [[glClearAccum]] lassen sich die beim Löschen geschriebenen Farbwerte festlegen.
Zeile 62: Zeile 63:
  
 
'''Achtung:''' Wenn das Ergebniss 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!
 
'''Achtung:''' Wenn das Ergebniss 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!
 
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==

Version vom 7. Mai 2006, 12:58 Uhr

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 im Bereich von –1 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]* in auf Fließkommzahlen im Intervall [0,1] ab. (Und zwar linear, wobei die 0 so 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.

Nur die Pixel innerhalb der Scissor-Box werden beachtet. Diese lässt sich mit glScissor setzen.

Achtung: Wenn das Ergebniss 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!

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


  • ) 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.