glFrustum: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
K
 
(26 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glFrustum =
 
= glFrustum =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
----
 
 
'''glFrustum''' - Multipliziert die aktuelle Matrix mit einer perspektivischen Matrix.
 
'''glFrustum''' - Multipliziert die aktuelle Matrix mit einer perspektivischen Matrix.
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
----
 
 
  procedure '''glFrustum'''(''left'', ''right'', ''bottom'', ''top'', ''zNear'', ''zFar'' : glDouble);
 
  procedure '''glFrustum'''(''left'', ''right'', ''bottom'', ''top'', ''zNear'', ''zFar'' : glDouble);
  
<br>
+
 
 +
 
 
== Parameter ==
 
== Parameter ==
----
+
[[Bild:Frustum.png|thumb|200px|Bildliche Darstellung eines Frustums.]]
 
<table border=1 rules=all>
 
<table border=1 rules=all>
 
<tr>
 
<tr>
Zeile 29: Zeile 28:
 
</table>
 
</table>
  
<br>
+
 
 +
 
 
== Beschreibung ==  
 
== Beschreibung ==  
----
 
 
'''glFrustum''' beschreibt eine perspektivische Matrix, die eine perspektivische Projektion herstellt. Die aktuelle Matrix (siehe [[glMatrixMode]]) wird mit dieser Matrix multipliziert, und dieses Ergebnis ersetzt die aktuelle Matrix, als ob [[glMultMatrix]] mit folgender Matrix aufgerufen worden wäre :
 
'''glFrustum''' beschreibt eine perspektivische Matrix, die eine perspektivische Projektion herstellt. Die aktuelle Matrix (siehe [[glMatrixMode]]) wird mit dieser Matrix multipliziert, und dieses Ergebnis ersetzt die aktuelle Matrix, als ob [[glMultMatrix]] mit folgender Matrix aufgerufen worden wäre :
  
| (2 * Z-Fern) / (Rechts - Links)       0         A 0 |
+
[[bild:glFrustum_Matrix.png|left]]
| 0                   (2 * Z-Nah) / (Oben - Unten)  B 0 |
 
| 0                               0         C D |
 
| 0                               0       -1 0 |
 
  
Wobei gilt :
 
  
A = (Rechts + Links) / (Rechts - Links)
+
'''Es gilt:''' <br>
B = (Oben + Unten) / (Oben - Unten)
+
''f'' = ''zFar'' <br>
C = -(Z-Fern + Z-Nah) / (Z-Fern - Z-Nah)
+
''n'' = ''zNear''<br>
  D = (-2 * Z-Fern * Z-Nah) / (Z-Fern - Z-Nah)
+
''l'' = ''left''<br>
 +
''r'' = ''right''<br>
 +
''t'' = ''top''<br>
 +
''b'' = ''bottom''<br>
 +
 
 +
 
 +
 
 +
Normalerweise ist der Matrizenmodus '''GL_PROJECTION''', (Links, Unten, -Z-Nah) und (Rechts, Oben, -Z-Nah) beschreiben die Punkte auf der Nah-Schnittfläche, die auf die linkere untere, und obere rechte Ecke des Fensters gelegt werden, unter Annahme dass das Auge bei (0,0,0) liegt. - Z-Fern gibt dabei die Position der Fern-Schnittfläche an. Sowohl Z-Fern als auch Z-Nah müssen positiv sein.
 +
 
 +
Mittels [[glPushMatrix]] und [[glPopMatrix]] kann man Matrizen auf dem [[Stack]] sichern bzw. wieder zurücknehmen.
  
Normalerweise ist der Matrizenmodus '''GL_PROJECTION''', (Links, Unten, -Z-Fern) und (Rechts, Oben, -Z-Nah) beschreiben die Punkte auf der Nah-Schnittfläche, die auf die linkere untere, und obere rechte Ecke des Fensters gelegt werden, unter Annahme dass Auge liegt bei (0,0,0). - Z-Fern gibt dabei die Position der Fern-Schnittfläche an. Sowohl Z-Fern als auch Z-Nah müssen positiv sein.
 
  
Mittels [[glPushMatrix]] und [[glPopMatrix]] kann man Matrizen auf dem Stack sichern bzw. wieder zurücknehmen.
 
  
<br>
 
 
== Hinweise ==
 
== Hinweise ==
----
+
Die Genauigkeit des Tiefenpuffers hängt von den in Z-Nah und Z-Fern angegebenen Werte ab. Je größer der Ratio von Z-Fern zu Z-Nah ist, desto niedriger wird der Tiefenpuffer aufgelöst.  
Die Genauigkeit des Tiefenpuffers hängt von den in Z-Nah und Z-Fern angegebenen Werte ab. Je größer der Ratio von Z-Fern zu Z-Nah ist, desto niedriger wird der Tiefenpuffeer aufgelöst.  
 
  
 
Wenn  
 
Wenn  
Zeile 59: Zeile 59:
 
  r = Z-Nah / Z-Fern
 
  r = Z-Nah / Z-Fern
  
dann gehen ~ log 2*r Bits an Tiefenpuffergenauigkeit verloren. Da ''r'' gegen unendlichs strebt, wenn Z-Nah gegen Null geht, darf Z-Nah niemals gleich 0 sein.
+
dann gehen ~ log 2*r Bits an Tiefenpuffergenauigkeit verloren.
 +
 
 +
Z-Fern darf nicht Null sein, weil die Division durch 0 nicht definiert ist.
 +
 
 +
Z-Nah darf nicht Null sein, weil sonst ''r'' Null wird und dann ist log 2*r nicht definiert.
 +
 
 +
 
  
<br>
 
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
----
+
'''GL_INVALID_VALUE''' wird generiert, wenn ''zNear'' oder ''zFar'' null oder negativ ist, ''zNear'' gleich ''zFar'', ''left'' gleich ''right'' oder ''top'' gleich ''bottom'' ist.
'''GL_INVALID_VALUE''' wird generiert, wenn ''zNear'' oder ''zFar'' nicht positiv sind.
 
  
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glFrustum''' zwischen einem [[glBegin]] und dem zugehörigen [[glEnd]] aufgerufen wird.
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glFrustum''' zwischen einem [[glBegin]] und dem zugehörigen [[glEnd]] aufgerufen wird.
  
<br>
+
 
 +
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
----
+
[[glGet]] mit dem Token [[glGet#GL_MATRIX_MODE|GL_MATRIX_MODE]]
[[glGet]] mit dem Token '''GL_MATRIX_MODE'''.<br>
+
 
[[glGet]] mit dem Token '''GL_MODELVIEW_MATRIX'''.<br>
+
[[glGet]] mit dem Token [[glGet#GL_MODELVIEW_MATRIX|GL_MODELVIEW_MATRIX]]
[[glGet]] mit dem Token '''GL_PROJECTION_MATRIX'''.<br>
+
 
[[glGet]] mit dem Token '''GL_TEXTURE_MATRIX'''.<br>
+
[[glGet]] mit dem Token [[glGet#GL_PROJECTION_MATRIX|GL_PROJECTION_MATRIX]]
 +
 
 +
[[glGet]] mit dem Token [[glGet#GL_TEXTURE_MATRIX|GL_TEXTURE_MATRIX]]
 +
 
 +
[[glGet]] mit dem Token [[glGet#GL_COLOR_MATRIX|GL_COLOR_MATRIX]]
 +
 
 +
 
 +
 
 +
== Links ==
 +
http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml
  
<br>
 
 
== Siehe auch ==
 
== Siehe auch ==
----
+
Hintergrund: [[Frustum]]
[[glOrtho]], [[glMatrixMode]], [[glMultMatrix]], [[glPushMatrix]], [[glViewport]]
+
 
 +
[[gluPerspective]], [[glOrtho]], [[glMatrixMode]], [[glMultMatrix]], [[glPushMatrix]], [[glViewport]]
 +
 
 +
[[Kategorie:GL|Frustum]]
 +
[[Kategorie:GL1.0|Frustum]]

Aktuelle Version vom 18. Juni 2011, 15:48 Uhr

glFrustum

Name

glFrustum - Multipliziert die aktuelle Matrix mit einer perspektivischen Matrix.

Delphi-Spezifikation

procedure glFrustum(left, right, bottom, top, zNear, zFar : glDouble);


Parameter

Bildliche Darstellung eines Frustums.
left, right Gibt die Koordinaten für die linke bzw. rechte (vertikale) Schnittfläche an.
bottom, top Gibt die Koordinaten für die untere bzw. obere (horizontale) Schnittfläche an.
zNear, zFar Gibt den Abstand zur Nah- bzw. Weit-Tiefenschnittfläche an. Beide Entfernungen müssen positiv sein.


Beschreibung

glFrustum beschreibt eine perspektivische Matrix, die eine perspektivische Projektion herstellt. Die aktuelle Matrix (siehe glMatrixMode) wird mit dieser Matrix multipliziert, und dieses Ergebnis ersetzt die aktuelle Matrix, als ob glMultMatrix mit folgender Matrix aufgerufen worden wäre :

glFrustum Matrix.png


Es gilt:
f = zFar
n = zNear
l = left
r = right
t = top
b = bottom


Normalerweise ist der Matrizenmodus GL_PROJECTION, (Links, Unten, -Z-Nah) und (Rechts, Oben, -Z-Nah) beschreiben die Punkte auf der Nah-Schnittfläche, die auf die linkere untere, und obere rechte Ecke des Fensters gelegt werden, unter Annahme dass das Auge bei (0,0,0) liegt. - Z-Fern gibt dabei die Position der Fern-Schnittfläche an. Sowohl Z-Fern als auch Z-Nah müssen positiv sein.

Mittels glPushMatrix und glPopMatrix kann man Matrizen auf dem Stack sichern bzw. wieder zurücknehmen.


Hinweise

Die Genauigkeit des Tiefenpuffers hängt von den in Z-Nah und Z-Fern angegebenen Werte ab. Je größer der Ratio von Z-Fern zu Z-Nah ist, desto niedriger wird der Tiefenpuffer aufgelöst.

Wenn

r = Z-Nah / Z-Fern

dann gehen ~ log 2*r Bits an Tiefenpuffergenauigkeit verloren.

Z-Fern darf nicht Null sein, weil die Division durch 0 nicht definiert ist.

Z-Nah darf nicht Null sein, weil sonst r Null wird und dann ist log 2*r nicht definiert.


Fehlermeldungen

GL_INVALID_VALUE wird generiert, wenn zNear oder zFar null oder negativ ist, zNear gleich zFar, left gleich right oder top gleich bottom ist.

GL_INVALID_OPERATION wird generiert, wenn glFrustum zwischen einem glBegin und dem zugehörigen glEnd aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit dem Token GL_MATRIX_MODE

glGet mit dem Token GL_MODELVIEW_MATRIX

glGet mit dem Token GL_PROJECTION_MATRIX

glGet mit dem Token GL_TEXTURE_MATRIX

glGet mit dem Token GL_COLOR_MATRIX


Links

http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml

Siehe auch

Hintergrund: Frustum

gluPerspective, glOrtho, glMatrixMode, glMultMatrix, glPushMatrix, glViewport