glAccum: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(fehlerhaftes HTML durch Wiki Syntax ersetzt)
K (Ergebniss -> Ergebnis)
 
(6 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 im im Bereich von –1 bis 1. Dabei bilden die Pixel im Accumulation-Buffer eins zu eins auf die Pixel im Framebuffer ab.
+
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]* 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]* 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.
  
 
'''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.
  
 +
{{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!}}
 +
 +
 +
----
 +
<nowiki>*</nowiki>) 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.
 +
[[Kategorie:GL|Accum]]
 +
----
 +
 +
==Hinweise==
 
Nur die Pixel innerhalb der Scissor-Box werden beachtet. Diese lässt sich mit [[glScissor]] setzen.
 
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!
+
 
 +
 
 +
==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.<br>
+
'''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.
  
  
  
 
== 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]]
  
----
 
*) 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.
 
 
[[Kategorie:GL|Accum]]
 
[[Kategorie:GL|Accum]]
 +
[[Kategorie:GL1.0|Accum]]

Aktuelle Version vom 20. März 2012, 15:30 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 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.

Warnung.png 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!



*) 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