gluPerspective: Unterschied zwischen den Versionen
K (→Beschreibung: gluPerspective im eben erzeugten Hinweis eingefettet.) |
|||
(14 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= gluPerspective = | = gluPerspective = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''gluPerspective''' - Erstellt eine perspektivische Projektionsmatrix. | '''gluPerspective''' - Erstellt eine perspektivische Projektionsmatrix. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | procedure '''gluPerspective'''(''fovy'', ''aspect'', ''zNear'', ''zFar'' : ''glDouble''); | + | procedure '''gluPerspective'''(''fovy'', ''aspect'', ''zNear'', ''zFar'' : ''glDouble''); |
− | |||
− | |||
== Parameter == | == Parameter == | ||
Zeile 19: | Zeile 19: | ||
|- | |- | ||
! ''aspect'' | ! ''aspect'' | ||
− | | Gibt den Aspektratio, der das Betrachtungsfeld entlang der X-Achse setzt. Der Aspektratio ist das Verhältnis von Höhe | + | | Gibt den Aspektratio, der das Betrachtungsfeld entlang der X-Achse setzt. Der Aspektratio ist das Verhältnis von Breite zu Höhe. |
|- | |- | ||
! ''zNear'' | ! ''zNear'' | ||
− | | Entfernung vom | + | | Entfernung vom Betrachter zur nahen Z-Schnittfläche (muss positiv sein). |
|- | |- | ||
! ''zFar'' | ! ''zFar'' | ||
− | | Entfernung vom | + | | Entfernung vom Betrachter zur fernen Z-Schnittfläche (muss positiv sein). |
|} | |} | ||
− | |||
− | |||
== Beschreibung == | == Beschreibung == | ||
Zeile 34: | Zeile 32: | ||
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. | 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. | ||
+ | Für ''f'' = cotangent(fovy/2), sieht die erstellte Matrix so aus : | ||
+ | |||
+ | <div align="center"> [[Bild:GluPerspective.png]]</div> | ||
+ | {{Vorlage:Hinweis|Obwohl der Parameter fovy für '''gluPerspective''' in Grad angegeben wird, sollte bedacht werden, dass dies vor der Verwendung im cotangent in Bogenmaß umgerechnet werden muss. Dies ist nur wichtig, wenn man die Funktionialität von '''gluPerspective''' selber nachbauen will.}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ===Anwendung=== | |
− | + | '''gluPerspective''' wird nur gebraucht wenn eine perspektivische Projektion benutzt werden soll. (siehe auch [[glOrtho]]) | |
− | + | *Wo gehört '''gluPerspective''' hin?: | |
− | + | : In die Initialisierung des Forumulars um überhaupt eine Projektion zu erhalten. | |
− | + | : In die Behandlung des OnResize-Events, da die Projektion an die neuen Fenstermaße angepasst werden sollte. | |
− | + | : In den Render-Code wenn sich innerhalb des Renderdurchgangs die Projektion ändert. | |
− | |||
− | |||
− | |||
− | |||
− | |||
+ | *Wo gehört '''gluPerspective''' nicht hin?: | ||
+ | : In den Render-Code wenn sich die Projektion während des Rendervorgangs nicht ändert. | ||
− | |||
== Hinweise == | == 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. | 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 | + | Wenn ''r'' = ''zFar'' / ''zNear'', dann gehen ungefähr log(2)r Bits an Tiefenpuffergenauigkeit verloren. Da ''r'' gegen Unendlich strebt wenn ''zNear'' gegen 0 strebt, darf ''zNear'' niemals gleich 0 gesetzt werden. |
+ | |||
+ | |||
− | |||
== Siehe auch == | == Siehe auch == | ||
[[glFrustum]], [[glLoadIdentity]], [[glMultMatrix]], [[gluOrtho2D]] | [[glFrustum]], [[glLoadIdentity]], [[glMultMatrix]], [[gluOrtho2D]] | ||
+ | |||
+ | [[Kategorie:GLU|Perspective]] |
Aktuelle Version vom 15. Oktober 2010, 19:47 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 Breite zu Höhe. |
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.
Für f = cotangent(fovy/2), sieht die erstellte Matrix so aus :
Anwendung
gluPerspective wird nur gebraucht wenn eine perspektivische Projektion benutzt werden soll. (siehe auch glOrtho)
- Wo gehört gluPerspective hin?:
- In die Initialisierung des Forumulars um überhaupt eine Projektion zu erhalten.
- In die Behandlung des OnResize-Events, da die Projektion an die neuen Fenstermaße angepasst werden sollte.
- In den Render-Code wenn sich innerhalb des Renderdurchgangs die Projektion ändert.
- Wo gehört gluPerspective nicht hin?:
- In den Render-Code wenn sich die Projektion während des Rendervorgangs nicht ändert.
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 an Tiefenpuffergenauigkeit verloren. Da r gegen Unendlich strebt wenn zNear gegen 0 strebt, darf zNear niemals gleich 0 gesetzt werden.