glStencilOp: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Siehe auch)
K (Beschreibung: Link und Rechtschreibung korrigiert)
 
(5 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
  
 
== Name ==
 
== Name ==
'''glStencilOp''' - Legt fest was beim Stencil Test passiert.
+
'''glStencilOp''' - Legt fest, was beim Stencil-Test passiert.
  
  
  
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  procedure '''glStencilOp''' ('''''fail,zfail,zpass''''': TGLenum);
+
  procedure '''glStencilOp''' (''fail,zfail,zpass'': TGLenum);
  
  
Zeile 16: Zeile 16:
 
== Parameter ==
 
== Parameter ==
  
Die Parameter können folgende Konstanten enthalten:'''GL_KEEP''', '''GL_ZERO''', '''GL_REPLACE''', '''GL_INCR''', '''GL_DECR''', und'''GL_INVERT'''. <br>
+
Die Parameter können folgende Konstanten enthalten: '''GL_KEEP''', '''GL_ZERO''', '''GL_REPLACE''', '''GL_INCR''', '''GL_INCR_WRAP''', '''GL_DECR''', '''GL_DECR_WRAP''' und'''GL_INVERT'''.
 +
 
 
Der '''Standartwert''' bei allen Parametern ist '''GL_KEEP'''.  
 
Der '''Standartwert''' bei allen Parametern ist '''GL_KEEP'''.  
  
 
{| border="1" rules="all"
 
{| border="1" rules="all"
 
! ''fail''
 
! ''fail''
| Legt fest was gemacht wird wenn der Stencil Test fehlschlägt.   
+
| Legt fest, was gemacht wird, wenn der Stencil-Test fehlschlägt.   
 
|-
 
|-
 
! ''zfail''
 
! ''zfail''
| Legt fest was passiert wenn der Stencil Test erfolgreich ist aber der Tiefentest fehlschlägt.
+
| Legt fest, was passiert, wenn der Stencil-Test erfolgreich ist aber der Tiefentest fehlschlägt.
 
|-
 
|-
 
! ''zpass''
 
! ''zpass''
| Legt fest was passiert wenn sowohl der [[Stenciltest]] als auch [[Tiefentest]] erfolgreich ist. Ist der [[Tiefentest]] deaktiviert so gilt dieser als bestanden.
+
| Legt fest, was passiert, wenn sowohl der [[Stenciltest]] als auch [[Tiefentest]] erfolgreich ist. Ist der [[Tiefentest]] deaktiviert, so gilt dieser als bestanden.
 
|}
 
|}
  
Zeile 35: Zeile 36:
 
== Beschreibung ==  
 
== Beschreibung ==  
  
Jeder Pixel wird der mit [[glStencilFunc]] festgelegten Test unterzogen. Welche Auswirkung dieser Test nun auf den [[Schablonenpuffer]](stencil buffer) selbst hat, wird mit '''glStencilOp''' festgelegt. Auf diese weise ist es möglich durch das Zeichnen von Primitiven den [[Schablonenpuffer]] zu verändern. Der Inhalt [[Schablonenpuffer]] kann anschließen als eine Art Schablone verwendet werden um Teile der Zeichenfläche vom Zeichnen auszunehmen. Diese Technik wird vorallem bei Rendervorgängen mit mehren Durchgängen genutzt um Spezial-Effekte wie Spiegelungen, [[decals]] und [[outlining]] zu erzeugen.
+
Jeder Pixel wird der mit [[glStencilFunc]] festgelegten Test unterzogen. Welche Auswirkung dieser Test nun auf den [[Schablonenpuffer]](stencil buffer) selbst hat, wird mit '''glStencilOp''' festgelegt. Auf diese Weise ist es möglich, durch das Zeichnen von Primitiven den [[Schablonenpuffer]] zu verändern. Der Inhalt des [[Schablonenpuffer]]s kann anschließend als eine Art Schablone verwendet werden, um Teile der Zeichenfläche vom Zeichnen auszunehmen. Diese Technik wird vor allem bei Rendervorgängen mit mehren Durchgängen genutzt, um Spezial-Effekte wie [[Tutorial_StencilSpiegel|Spiegelungen]], [[Decals]] und [[Outlining]] zu erzeugen.
  
 
;'''GL_KEEP''' :Keine Veränderung
 
;'''GL_KEEP''' :Keine Veränderung
  
;'''GL_ZERO''' :Setzt den Wert im Schablonen Puffer auf Null
+
;'''GL_ZERO''' :Setzt den Wert im Schablonenpuffer auf Null
 +
 
 +
;'''GL_REPLACE''' :Setzt den Wert im Schablonenpuffer auf '''''ref''''' von [[glStencilFunc]].
 +
 
 +
;'''GL_INCR''' :Erhöht den Wert im Schablonenpuffer. Die obere Begrenzung liegt beim höchsten vorzeichenlosen Wert.
  
;'''GL_REPLACE''' :Setzt den Wert im Schablonen Puffer auf '''''ref''''' von [[glStencilFunc]].
+
;'''GL_INCR_WRAP''' :Erhöht den Wert im Schablonenpuffer. Falls dabei der größte, darstellbare vorzeichenlosen Wert erhöht werden soll, wird der Wert im Schablonenpuffer auf null gesetzt.
  
;'''GL_INCR''' :Erhöht den Wert im Schablonen Puffer. Die obere Begrenzung liegt beim höchsten vorzeichenlosen Wert.
+
;'''GL_DECR''' :Verringert den Wert im Schablonenpuffer. (Die untere Begrenzung liegt bei 0.)
  
;'''GL_DECR''' :Verringert den Wert im Schablonen Puffer.(Die untere Begrenzung liegt bei 0)
+
;'''GL_DECR_WRAP''' :Verringert den Wert im Schablonenpuffer. Falls der zu verringernde Wert im Schablonenpuffer null ist, dann wird er auf den größten darstellbaren vorzeichenlosen Wert gesetzt.
  
;'''GL_INVERT''' : Bitweise Invertierung des Wertes im Schablonen Puffer.
+
;'''GL_INVERT''' : Bitweise Invertierung des Wertes im Schablonenpuffer.
  
  
  
Die Werte des Schablonenpuffers werden als Vorzeichenlose Ganzzahl behandelt. Wenn die Werte inkrementiert(erhöht) oder dekrementiert(verringert) werden, werden Sie anschließend auf das Intervall [0,max] umgerechnet, wobei '''max =  (2^[[glGet#GL_STENCIL_BITS|GL_STENCIL_BITS]]) -1''' ist.
+
Die Werte des Schablonenpuffers werden als vorzeichenlose Ganzzahl behandelt. Wenn die Werte inkrementiert(erhöht) oder dekrementiert(verringert) werden, werden sie anschließend auf das Intervall [0,max] umgerechnet, wobei '''max =  (2^[[glGet#GL_STENCIL_BITS|GL_STENCIL_BITS]]) -1''' ist.
  
 
== Hinweise ==
 
== Hinweise ==
Beachten Sie, dass ''zfail'' ignoriert wird, wenn kein Tiefenpuffer existiert oder dieser nicht aktiviert ist. In diesem Falle geben ''zfail'' bzw. ''zpass'' and, welche Aktion stattfindet wenn der Stenciltest fehlschlägt bzw. passiert.
+
Beachten Sie, dass ''zfail'' ignoriert wird, wenn kein Tiefenpuffer existiert oder dieser nicht aktiviert ist. In diesem Falle geben ''zfail'' bzw. ''zpass'' an, welche Aktion stattfindet, wenn der Stenciltest fehlschlägt bzw. passiert.
 +
 
 +
Falls kein [[Schablonenpuffer]] existiert (etwa weil das Pixel Format keinen enthält), ist der Stenciltest immer erfolgreich unabhängig von den Einstellungen durch '''glStencilOp'''.
  
Falls kein [[Schablonenpuffer]] existiert(etwa weil das Pixel Format keinen enthält), ist der Stenciltest immer erfolgreich unabhängig von den Einstellungen durch '''glStencilOp'''.  
+
'''GL_DECR_WRAP''' und '''GL_INCR_WRAP''' sind erst ab OpenGL-Version 1.4 verfügbar.
  
 +
== Änderungen ==
 +
Folgende Erweiterungen hat die Funktion erfahren:
 +
=== Ab OpenGL-Version 1.4 ===
  
 +
Die Parameter der Funktion '''glStencilOp''' können nun auch die Konstantenwerte '''GL_DECR_WRAP''' und '''GL_INCR_WRAP''' annehmen.
  
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_ENUM''' wird generiert wenn einer der Parameter (''fail'', ''zfail'' und ''zpass'') einen anderen Wert als die 6 Konstanten enthält.
+
'''GL_INVALID_ENUM''' wird generiert, wenn einer der Parameter (''fail'', ''zfail'' und ''zpass'') einen anderen Wert als die acht Konstanten enthält.
  
'''GL_INVALID_OPERATION''' wird generiert wenn '''glStecilOp''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
+
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glStencilOp''' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.  
  
  
Zeile 74: Zeile 85:
 
*[[glGet]] mit Token [[glGet#GL_STENCIL_BITS|GL_STENCIL_BITS]]
 
*[[glGet]] mit Token [[glGet#GL_STENCIL_BITS|GL_STENCIL_BITS]]
 
*[[glIsEnabled]] mit Token GL_STENCIL_TEST
 
*[[glIsEnabled]] mit Token GL_STENCIL_TEST
<br>
+
 
 +
 
  
 
== Siehe auch ==
 
== Siehe auch ==
Zeile 82: Zeile 94:
  
 
[[Kategorie:GL|StencilOp]]
 
[[Kategorie:GL|StencilOp]]
[[Kategorie:GL1.0]]
+
[[Kategorie:GL1.0|StencilOp]]

Aktuelle Version vom 13. Oktober 2013, 00:10 Uhr

glStencilOp

Name

glStencilOp - Legt fest, was beim Stencil-Test passiert.


Delphi-Spezifikation

procedure glStencilOp (fail,zfail,zpass: TGLenum);



Parameter

Die Parameter können folgende Konstanten enthalten: GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_INCR_WRAP, GL_DECR, GL_DECR_WRAP undGL_INVERT.

Der Standartwert bei allen Parametern ist GL_KEEP.

fail Legt fest, was gemacht wird, wenn der Stencil-Test fehlschlägt.
zfail Legt fest, was passiert, wenn der Stencil-Test erfolgreich ist aber der Tiefentest fehlschlägt.
zpass Legt fest, was passiert, wenn sowohl der Stenciltest als auch Tiefentest erfolgreich ist. Ist der Tiefentest deaktiviert, so gilt dieser als bestanden.



Beschreibung

Jeder Pixel wird der mit glStencilFunc festgelegten Test unterzogen. Welche Auswirkung dieser Test nun auf den Schablonenpuffer(stencil buffer) selbst hat, wird mit glStencilOp festgelegt. Auf diese Weise ist es möglich, durch das Zeichnen von Primitiven den Schablonenpuffer zu verändern. Der Inhalt des Schablonenpuffers kann anschließend als eine Art Schablone verwendet werden, um Teile der Zeichenfläche vom Zeichnen auszunehmen. Diese Technik wird vor allem bei Rendervorgängen mit mehren Durchgängen genutzt, um Spezial-Effekte wie Spiegelungen, Decals und Outlining zu erzeugen.

GL_KEEP 
Keine Veränderung
GL_ZERO 
Setzt den Wert im Schablonenpuffer auf Null
GL_REPLACE 
Setzt den Wert im Schablonenpuffer auf ref von glStencilFunc.
GL_INCR 
Erhöht den Wert im Schablonenpuffer. Die obere Begrenzung liegt beim höchsten vorzeichenlosen Wert.
GL_INCR_WRAP 
Erhöht den Wert im Schablonenpuffer. Falls dabei der größte, darstellbare vorzeichenlosen Wert erhöht werden soll, wird der Wert im Schablonenpuffer auf null gesetzt.
GL_DECR 
Verringert den Wert im Schablonenpuffer. (Die untere Begrenzung liegt bei 0.)
GL_DECR_WRAP 
Verringert den Wert im Schablonenpuffer. Falls der zu verringernde Wert im Schablonenpuffer null ist, dann wird er auf den größten darstellbaren vorzeichenlosen Wert gesetzt.
GL_INVERT 
Bitweise Invertierung des Wertes im Schablonenpuffer.


Die Werte des Schablonenpuffers werden als vorzeichenlose Ganzzahl behandelt. Wenn die Werte inkrementiert(erhöht) oder dekrementiert(verringert) werden, werden sie anschließend auf das Intervall [0,max] umgerechnet, wobei max = (2^GL_STENCIL_BITS) -1 ist.

Hinweise

Beachten Sie, dass zfail ignoriert wird, wenn kein Tiefenpuffer existiert oder dieser nicht aktiviert ist. In diesem Falle geben zfail bzw. zpass an, welche Aktion stattfindet, wenn der Stenciltest fehlschlägt bzw. passiert.

Falls kein Schablonenpuffer existiert (etwa weil das Pixel Format keinen enthält), ist der Stenciltest immer erfolgreich unabhängig von den Einstellungen durch glStencilOp.

GL_DECR_WRAP und GL_INCR_WRAP sind erst ab OpenGL-Version 1.4 verfügbar.

Änderungen

Folgende Erweiterungen hat die Funktion erfahren:

Ab OpenGL-Version 1.4

Die Parameter der Funktion glStencilOp können nun auch die Konstantenwerte GL_DECR_WRAP und GL_INCR_WRAP annehmen.


Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn einer der Parameter (fail, zfail und zpass) einen anderen Wert als die acht Konstanten enthält.

GL_INVALID_OPERATION wird generiert, wenn glStencilOp innerhalb eines glBegin-glEnd-Blocks aufgerufen wird.


Zugehörige Wertrückgaben


Siehe auch

glAlphaFunc, glBlendFunc, glDepthFunc, glEnable, glLogicOp, glStencilFunc