gluPerspective: Unterschied zwischen den Versionen
Zeile 1: | Zeile 1: | ||
+ | = gluPerspective = | ||
+ | <br> | ||
+ | == Name == | ||
+ | '''gluPerspective''' - Erstellt eine perspektivische Projektionsmatrix. | ||
+ | |||
+ | <br> | ||
+ | == Delphi-Spezifikation == | ||
+ | |||
+ | procedure '''gluPerspective'''(''fovy'', ''aspect'', ''zNear'', ''zFar'' : ''glDouble''); | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Parameter == | ||
+ | |||
+ | {| border="1" rules="all" | ||
+ | ! ''fovy'' | ||
+ | | Gibt das Betrachtungsfeld (FOV) in Grad, entlang der Y-Achse, an. | ||
+ | |- | ||
+ | ! ''aspect'' | ||
+ | | Gibt den Aspektratio, der das Betrachtungsfeld entlang der X-Achse setzt. Der Aspektratio ist das Verhältnis von Höhe zu Breite. | ||
+ | |- | ||
+ | ! ''zNear'' | ||
+ | | Entfernung vom betrachter zur nahen Z-Schnittfläche (muss positiv sein). | ||
+ | |- | ||
+ | ! ''zFar'' | ||
+ | | Entfernung vom betrachter zur fernen Z-Schnittfläche (muss positiv sein). | ||
+ | |} | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Beschreibung == | ||
+ | '''gluPerspective''' beschreibt ein Betrachtungssichtfeld (Frustum) ins Weltkoordinatensystem hinein. Meistens setzt man den Aspektratio dabei gleich dem Aspektratio des zugewiesenen Viewports. | ||
+ | Die von '''gluPerspective''' erstellte Matrix wird mit der aktuellen Matrix multipliziert, so als ob man [[glMultMatrix]] mit der generierten Matrix aufgerufen hätte. Um die perspektivische Matrix zu setzen, sollte man zuerst [[glLoadIdentity]] und dann '''gluPerspective''' aufrufen. | ||
+ | |||
+ | |||
+ | The matrix generated by gluPerspective is multipled by the | ||
+ | current matrix, just as if glMultMatrix were called with the | ||
+ | generated matrix. To load the perspective matrix onto the | ||
+ | current matrix stack instead, precede the call to | ||
+ | gluPerspective with a call to glLoadIdentity. | ||
+ | |||
+ | Für ''f'' = cotangent(fovy/2), sieht die erstellte Matrix so aus : | ||
+ | |||
+ | | f | | ||
+ | | ------ 0 0 0 | | ||
+ | | aspect | | ||
+ | | | | ||
+ | | 0 f 0 0 | | ||
+ | | | | ||
+ | | zFar+zNear 2*zFar*zNear | | ||
+ | | 0 0 ---------- ------------ | | ||
+ | | zNear-zFar zNear-zFar | | ||
+ | | | | ||
+ | | 0 0 -1 0 | | ||
+ | |||
+ | |||
+ | <br> | ||
+ | == Hinweise == | ||
+ | Die Genauigkeit des Tiefenpuffer wird von den in ''zNear'' und ''zFar'' angegebenen Werten beeinflusst. Je größer das Verhältnis von ''zFar'' zu ''zNear'', je ineffektiver kann der Tiefenpuffer zwischen nah beieinander liegenden Oberflächen unterscheiden. | ||
+ | Wenn ''r'' = ''zFar'' / ''zNear'', dann gehen ungefähr log(2)r Bits and Tiefenpuffergenauigkeit verloren. Da ''r'' gegen Unendlich strebt wenn ''zNear'' gegen 0 strebt, darf ''zNear'' niemals gleich 0 gesetzt werden. | ||
+ | |||
+ | <br> | ||
+ | == Siehe auch == | ||
+ | [[glFrustum]], [[glLoadIdentity]], [[glMultMatrix]], [[gluOrtho2D]] |
Version vom 23. August 2004, 11:23 Uhr
Inhaltsverzeichnis
gluPerspective
Name
gluPerspective - Erstellt eine perspektivische Projektionsmatrix.
Delphi-Spezifikation
procedure gluPerspective(fovy, aspect, zNear, zFar : glDouble);
Parameter
fovy | Gibt das Betrachtungsfeld (FOV) in Grad, entlang der Y-Achse, an. |
---|---|
aspect | Gibt den Aspektratio, der das Betrachtungsfeld entlang der X-Achse setzt. Der Aspektratio ist das Verhältnis von Höhe zu Breite. |
zNear | Entfernung vom betrachter zur nahen Z-Schnittfläche (muss positiv sein). |
zFar | Entfernung vom betrachter zur fernen Z-Schnittfläche (muss positiv sein). |
Beschreibung
gluPerspective beschreibt ein Betrachtungssichtfeld (Frustum) ins Weltkoordinatensystem hinein. Meistens setzt man den Aspektratio dabei gleich dem Aspektratio des zugewiesenen Viewports. Die von gluPerspective erstellte Matrix wird mit der aktuellen Matrix multipliziert, so als ob man glMultMatrix mit der generierten Matrix aufgerufen hätte. Um die perspektivische Matrix zu setzen, sollte man zuerst glLoadIdentity und dann gluPerspective aufrufen.
The matrix generated by gluPerspective is multipled by the
current matrix, just as if glMultMatrix were called with the
generated matrix. To load the perspective matrix onto the
current matrix stack instead, precede the call to
gluPerspective with a call to glLoadIdentity.
Für f = cotangent(fovy/2), sieht die erstellte Matrix so aus :
| f | | ------ 0 0 0 | | aspect | | | | 0 f 0 0 | | | | zFar+zNear 2*zFar*zNear | | 0 0 ---------- ------------ | | zNear-zFar zNear-zFar | | | | 0 0 -1 0 |
Hinweise
Die Genauigkeit des Tiefenpuffer wird von den in zNear und zFar angegebenen Werten beeinflusst. Je größer das Verhältnis von zFar zu zNear, je ineffektiver kann der Tiefenpuffer zwischen nah beieinander liegenden Oberflächen unterscheiden. Wenn r = zFar / zNear, dann gehen ungefähr log(2)r Bits and Tiefenpuffergenauigkeit verloren. Da r gegen Unendlich strebt wenn zNear gegen 0 strebt, darf zNear niemals gleich 0 gesetzt werden.