glDepthRange: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Parameter)
K (Siehe auch)
 
(10 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glDepthRange =
 
= glDepthRange =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
 
'''glDepthRange''' - Bestimmt wie z-Werte von normalisierten Gerätekoordinaten (Device coordinates) zu Fensterkoordinaten (Window coordinates) umgerechnet werden.
 
'''glDepthRange''' - Bestimmt wie z-Werte von normalisierten Gerätekoordinaten (Device coordinates) zu Fensterkoordinaten (Window coordinates) umgerechnet werden.
  
<br>
+
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  procedure '''glDepthRange'''(''zNear'': TGLclampd; ''zFar'': TGLclampd);
 
  procedure '''glDepthRange'''(''zNear'': TGLclampd; ''zFar'': TGLclampd);
  
<br>
+
 
 +
 
 
== Parameter ==
 
== Parameter ==
<table border=1 rules=all>
+
{| border=1 rules=all
<tr>
+
! ''near''
<td>''near''</td>
+
| Beschreibt wie die vordere [[Clipping Plane|Schnittebene]] in Fensterkoordinaten umgerechnet werden soll.<br>
<td>Beschreibt wie die vordere [[Clipping Plane|Schnittebene]] in Fensterkoordinaten umgerechnet werden soll.<br>
+
'''Vorgabewert''' ist 0.
'''Vorgabewert''' ist 0.</td>
+
|-
</tr>
+
! ''far''
<tr>
+
|Beschreibt, wie die hintere [[Clipping Plane|Schnittebene]] in Fensterkoordinaten umgerechnet werden soll.<br>
<td>''far''</td>
+
'''Vorgabewert''' ist 1.
<td>Beschreibt, wie die hintere [[Clipping Plane|Schnittebene]] in Fensterkoordinaten umgerechnet werden soll.<br>
+
|}
'''Vorgabewert''' ist 0.</td>
+
 
</tr>
 
</table>
 
  
<br>
 
  
 
== Beschreibung ==  
 
== Beschreibung ==  
Nach dem die Z-Koordinaten abgeschnitten (clipping) und durch '''w''' geteilt wurden, reichen sie von -1.0 bis 1.0 im Bezug auf die nahe und ferne [[Clipping Plane|Schnittfläche]].<br>
+
Nach dem die Z-Koordinaten abgeschnitten (clipping) und durch '''w''' geteilt wurden, reichen sie von -1.0 bis 1.0 im Bezug auf die vordere und hintere [[Clipping Plane|Schnittebene]].<br>
'''glDepthRange''' beschreibt, wie die normalisieten Z-Koordinaten linear auf dieses Intervall abgebildet und damit in Fenster-Z-Koordinaten umgerechnet werden.<br>
+
'''glDepthRange''' gibt an auf welchen Bereich der Fensterkoordinaten die Werte von -1.0 bis 1.0 linear abgebildet werden. Also wie aus dem Z-Wert eines Fragmentes, der an dieser Stelle im Bereich von -1.0 bis 1.0 liegt, der Wert für den DepthBuffer berechnet wird. Unabhängig von der tatsächlichen Implementierung darf dieser Wert im Intervall von 0.0 bis 1.0 liegen. Eine Z-Koordinate von -1.0 wird auf den Wert des Parameters near abgebildet und 1.0 entspricht den Wert des Parameters far.  
Ganz egal wie die aktuelle Implementation des [[Tiefenpuffer|Tiefenpuffers]] ist, die Tiefenwerte der Fensterkoordinaten werden immer so behandelt, als ob sie von 0.0 bis 1.0 reichen würden (so wie Farbkomponenten). Das heißt wiederum, dass beide Werte die von '''glDepthRange''' akzeptiert werden auf dieses Intervall heruntergerechnet werden bevor sie akzeptiert werden.
+
<br>
  
Die '''Vorgabe''' von 0, 1 überträgt die nahe Schnittfläche auf 0 und die ferne auf 1. <br>
 
Mit dieser Einstellung wird der Tiefenpuffer vollständig ausgenutzt.
 
 
<br>
 
 
== Hinweise ==
 
== Hinweise ==
 
Es ist nicht notwendig, dass ''near'' kleiner als ''far'' ist. Umgekehrtes Mapping z.B. mit 1, 0 wird akzeptiert
 
Es ist nicht notwendig, dass ''near'' kleiner als ''far'' ist. Umgekehrtes Mapping z.B. mit 1, 0 wird akzeptiert
 +
<br>
 +
Früher hat man den DepthBuffer nur jeden zweiten Frame gelöscht, abwechselnd die Bereiche von 0.0 bis 0.5 und 1.0 bis 0.5 genutzt und die Richtung des DepthTests dementsprechend angepaßt.
 +
Aufgrund von HW Optimierungen wie z.B. Hyper-Z usw. ist die Technik aber heutzutage nicht mehr angebracht und führt eher zu einem Geschwindigkeitsnachteil.
  
<br>
 
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_OPERATION''' wird generiert wenn '''glDepthRange''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
+
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glDepthRange''' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.
 +
 
 +
 
  
<br>
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGet]] mit Token [[glGet#GL_Depth_Range|GL_Depth_Range]]
+
[[glGet]] mit Token [[glGet#GL_DEPTH_RANGE|GL_DEPTH_RANGE]]
 +
 
 +
 
  
<br>
 
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glDepthFunc]], [[glViewport]]
+
[[glDepthFunc]], [[glPolygonOffset]], [[glViewport]]
  
 
[[Kategorie:GL|DepthRange]]
 
[[Kategorie:GL|DepthRange]]
 +
[[Kategorie:GL1.0|DepthRange]]
 +
[[Kategorie:GL3|DepthRange]]

Aktuelle Version vom 21. Februar 2014, 17:56 Uhr

glDepthRange

Name

glDepthRange - Bestimmt wie z-Werte von normalisierten Gerätekoordinaten (Device coordinates) zu Fensterkoordinaten (Window coordinates) umgerechnet werden.


Delphi-Spezifikation

procedure glDepthRange(zNear: TGLclampd; zFar: TGLclampd);


Parameter

near Beschreibt wie die vordere Schnittebene in Fensterkoordinaten umgerechnet werden soll.

Vorgabewert ist 0.

far Beschreibt, wie die hintere Schnittebene in Fensterkoordinaten umgerechnet werden soll.

Vorgabewert ist 1.


Beschreibung

Nach dem die Z-Koordinaten abgeschnitten (clipping) und durch w geteilt wurden, reichen sie von -1.0 bis 1.0 im Bezug auf die vordere und hintere Schnittebene.
glDepthRange gibt an auf welchen Bereich der Fensterkoordinaten die Werte von -1.0 bis 1.0 linear abgebildet werden. Also wie aus dem Z-Wert eines Fragmentes, der an dieser Stelle im Bereich von -1.0 bis 1.0 liegt, der Wert für den DepthBuffer berechnet wird. Unabhängig von der tatsächlichen Implementierung darf dieser Wert im Intervall von 0.0 bis 1.0 liegen. Eine Z-Koordinate von -1.0 wird auf den Wert des Parameters near abgebildet und 1.0 entspricht den Wert des Parameters far.

Hinweise

Es ist nicht notwendig, dass near kleiner als far ist. Umgekehrtes Mapping z.B. mit 1, 0 wird akzeptiert
Früher hat man den DepthBuffer nur jeden zweiten Frame gelöscht, abwechselnd die Bereiche von 0.0 bis 0.5 und 1.0 bis 0.5 genutzt und die Richtung des DepthTests dementsprechend angepaßt. Aufgrund von HW Optimierungen wie z.B. Hyper-Z usw. ist die Technik aber heutzutage nicht mehr angebracht und führt eher zu einem Geschwindigkeitsnachteil.

Fehlermeldungen

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


Zugehörige Wertrückgaben

glGet mit Token GL_DEPTH_RANGE



Siehe auch

glDepthFunc, glPolygonOffset, glViewport