glOrtho: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Delphi-Spezifikation: Style an Wiki angepasst)
K (Kategorisierung)
 
(17 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
 
'''glOrtho''' - aktiviert einen orthogonalen 2D-Rendermodus <br>  
 
'''glOrtho''' - aktiviert einen orthogonalen 2D-Rendermodus <br>  
  
<br>
+
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  procedure '''glOrtho'''(''left'', ''right'', ''bottom'', ''top'', ''znear'', ''zfar'' : double); <br>  
 
  procedure '''glOrtho'''(''left'', ''right'', ''bottom'', ''top'', ''znear'', ''zfar'' : double); <br>  
  
<br>
+
 
  
 
== Parameter ==
 
== Parameter ==
<table border=1 rules=all>
+
{| border=1 rules=all
<tr>
+
! '''left, right, bottom, top'''
<td> ''left, right, bottom, top''
+
| Definieren die 4 [[Clipping Plane]]s.
<td> Definieren die 4 [[Clipping Plane]]s.  
+
|-
<tr>
+
! '''znear, zfar'''
<td> ''znear, zfar''
+
| Setzen die Nah- und Fern- Clippingplane. Wenn die Fläche hinter dem User sein soll, müssen die Angaben negativ sein.
<td> Setzen die Nah- und Fern- Clippingplane. Wenn die Fläche hinter dem User sein soll müssen die Angaben negativ sein.
+
|}
  
</table> <br>
 
<br>
 
  
 
== Beschreibung ==  
 
== Beschreibung ==  
 
'''glOrtho''' erstellt eine Matrix für Parallel-Projektion. Die aktuelle Matrix wird dabei mit der neu erstellten Matrix multipliziert. Das bedeutet, wenn '''M''' die aktuelle und '''O''' die orthogonale Matrix ist, ergibt sich die neue Matrix aus: '''M := M*O'''
 
'''glOrtho''' erstellt eine Matrix für Parallel-Projektion. Die aktuelle Matrix wird dabei mit der neu erstellten Matrix multipliziert. Das bedeutet, wenn '''M''' die aktuelle und '''O''' die orthogonale Matrix ist, ergibt sich die neue Matrix aus: '''M := M*O'''
  
Benutzen Sie [[glPushMatrix]] und [[glPopMatrix]] um den aktuellen [[Matrixstack]] zu speichern und zu laden.
+
Benutzen Sie [[glPushMatrix]] und [[glPopMatrix]], um den aktuellen [[Matrixstack]] zu speichern und zu laden.
  
Die beiden Punkte (''left, bottom, -near'') und (''right, top, -near'') befinden sich auf der Nah-[[Clipping Plane]] und werden auf die linke-untere und rechte-obere Ecke des Fensters gemappt/abgebildet. Dabei wird die Position des Auges an Position (0,0,0) angenommen. ''-far'' bestimmt die Position der Fernen-[[Clipping Plane]]. Bei de Ebenen, die Nahe und die Ferne Schnittebene (Clipping Plane), können negative Werte annehmen.
+
Die beiden Punkte (''left, bottom, -near'') und (''right, top, -near'') befinden sich auf der Nah-[[Clipping Plane]] und werden auf die linke-untere und rechte-obere Ecke des Fensters gemappt/abgebildet. Dabei wird die Position des Auges an Position (0,0,0) angenommen. ''-far'' bestimmt die Position der Fernen-[[Clipping Plane]]. Beide Ebenen, die nahe und die ferne Schnittebene (Clipping Plane), können negative Werte annehmen.
  
<div align="center"> Die erstellete Matrix hat die Form: [[Bild:glOrtho_Matrix1.gif]]</div>
+
<div align="center"> Die erstellte Matrix hat die Form: [[Bild:GlOrtho_Matrix.png]]</div>
  
<div align="center"> Wobei gilt: [[Bild:glOrtho_Matrix2.gif]]</div>
+
mit ''f'' = ''zFar'', ''n'' = ''zNear''<br>
 +
''l'' = ''left'','' r'' = ''right''<br>
 +
''t'' = ''top'', ''b'' = ''bottom''<br>
  
 +
'''glOrtho''' schaltet OpenGL praktisch in einen 2D-Modus, wo die Z-Koordiante keine Rolle mehr im Bezug auf die letztendliche Größe eines Objektes hat (weit entfernte Objekte (mit hoher Z-Koordinate) werden genau so groß gezeichnet, wie nahe.) <br>
 +
Damit dient die Z-Koordiante nur noch zur "Anordnung"" von Vorder- und Hintergründen auf der 2D-Zeichenfläche.
  
 +
Aus diesem Grunde wird diese Form für alle 2D-Anwendungsfälle benutzt. Z.B. 2D-Spiele (Side-Scroller, Jump&Run), [[HUD]]s, Menüs, usw. .
 +
 +
{|width="100%" {{Prettytable}}
 +
!Othogonal
 +
!Perspektivisch
 +
|-
 +
|[[Bild:Orthomode_Quads.jpg|thumb|center|300px|Quads an verschiedenen Stellen auf der X-Achse im Orthomodus]]
 +
|[[Bild:GluPerspective_Quads_X.jpg|thumb|center|300px|''Zum Vergleich:'' Quads an verschiedenen Stellen der X-Achse im perspektivischen Modus]]
 +
|-
 +
|[[Bild:Orthomode_Quads.jpg|thumb|center|300px|die gleichen Quads mit veränderten Positionen auf der Z-Achse im orthogonalen Modus]]
 +
|[[Bild:GluPerspective_Quads_Z.jpg|thumb|center|300px|''Zum Verlgeich:'' Die gleiche Reihe wie ''oben'', nur mit veränderten Positionen auf der Z-Achse, wieder im perspektivischen Modus]]
 +
|}
 +
 +
{{Hinweis|Wie üblich werden Objekte, die eine kleinere Z-Koordinate als ''znear'' bzw. eine größere als ''zfar'' haben, nicht gezeichnet.}}
  
'''glOrtho''' schaltet OpenGL praktisch in einen 2D-Modus, wo die Z-Koordiante keine Rolle mehr im Bezug auf die letztendliche Größe eines Objektes hat (weit entfernte Objekte (mit hoher Z-Koordinate) werden genau so groß gezeichnet, wie Nahe.) <br>
 
Damit dient die Z-koordiante nur noch zur "Anordnung"" von Vorder- und Hintergründen auf der 2D-Zeichenfläche. <br>
 
  
''Objekte die einen kleineren Z-Koordinate als ''znear'' bzw. einen größeren als ''zfar'' haben, werden nicht gezeichnet.''
 
<br>
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_OPERATION''' wird generiert wenn '''glTexGen''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
+
* '''GL_INVALID_VALUE''' wird generiert, wenn ''zNear'' gleich ''zFar'', ''left'' gleich ''right'' oder ''top'' gleich bottom'' ist.
<br>
+
 
 +
* '''GL_INVALID_OPERATION''' wird generiert, wenn '''glOrtho''' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.
 +
 
 +
 
  
 
== Zugehörige Werterückgaben ==
 
== Zugehörige Werterückgaben ==
[[glGet]] mit Token [[glGet#GL_MATRIX_MODE|GL_MATRIX_MODE]]<br>
+
[[glGet]] mit Token [[glGet#GL_COLOR_MATRIX|GL_COLOR_MATRIX]]
[[glGet]] mit Token [[glGet#GL_MODELVIEW_MATRIX|GL_MODELVIEW_MATRIX]]<br>
+
 
[[glGet]] mit Token [[glGet#GL_PROJECTION_MATRIX|GL_PROJECTION_MATRIX]]<br>
+
[[glGet]] mit Token [[glGet#GL_MATRIX_MODE|GL_MATRIX_MODE]]
 +
 
 +
[[glGet]] mit Token [[glGet#GL_MODELVIEW_MATRIX|GL_MODELVIEW_MATRIX]]
 +
 
 +
[[glGet]] mit Token [[glGet#GL_PROJECTION_MATRIX|GL_PROJECTION_MATRIX]]
 +
 
 
[[glGet]] mit Token [[glGet#GL_TEXTURE_MATRIX|GL_TEXTURE_MATRIX]]
 
[[glGet]] mit Token [[glGet#GL_TEXTURE_MATRIX|GL_TEXTURE_MATRIX]]
  
  
<br>
+
 
 +
== Links ==
 +
http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml
  
 
== Siehe auch ==  
 
== Siehe auch ==  
Zeile 58: Zeile 81:
  
 
[[Kategorie:GL|Ortho]]
 
[[Kategorie:GL|Ortho]]
 +
[[Kategorie:GL1.0|Ortho]]

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

glOrtho

Name

glOrtho - aktiviert einen orthogonalen 2D-Rendermodus


Delphi-Spezifikation

procedure glOrtho(left, right, bottom, top, znear, zfar : double); 


Parameter

left, right, bottom, top Definieren die 4 Clipping Planes.
znear, zfar Setzen die Nah- und Fern- Clippingplane. Wenn die Fläche hinter dem User sein soll, müssen die Angaben negativ sein.


Beschreibung

glOrtho erstellt eine Matrix für Parallel-Projektion. Die aktuelle Matrix wird dabei mit der neu erstellten Matrix multipliziert. Das bedeutet, wenn M die aktuelle und O die orthogonale Matrix ist, ergibt sich die neue Matrix aus: M := M*O

Benutzen Sie glPushMatrix und glPopMatrix, um den aktuellen Matrixstack zu speichern und zu laden.

Die beiden Punkte (left, bottom, -near) und (right, top, -near) befinden sich auf der Nah-Clipping Plane und werden auf die linke-untere und rechte-obere Ecke des Fensters gemappt/abgebildet. Dabei wird die Position des Auges an Position (0,0,0) angenommen. -far bestimmt die Position der Fernen-Clipping Plane. Beide Ebenen, die nahe und die ferne Schnittebene (Clipping Plane), können negative Werte annehmen.

Die erstellte Matrix hat die Form: GlOrtho Matrix.png

mit f = zFar, n = zNear
l = left, r = right
t = top, b = bottom

glOrtho schaltet OpenGL praktisch in einen 2D-Modus, wo die Z-Koordiante keine Rolle mehr im Bezug auf die letztendliche Größe eines Objektes hat (weit entfernte Objekte (mit hoher Z-Koordinate) werden genau so groß gezeichnet, wie nahe.)
Damit dient die Z-Koordiante nur noch zur "Anordnung"" von Vorder- und Hintergründen auf der 2D-Zeichenfläche.

Aus diesem Grunde wird diese Form für alle 2D-Anwendungsfälle benutzt. Z.B. 2D-Spiele (Side-Scroller, Jump&Run), HUDs, Menüs, usw. .

Othogonal Perspektivisch
Quads an verschiedenen Stellen auf der X-Achse im Orthomodus
Zum Vergleich: Quads an verschiedenen Stellen der X-Achse im perspektivischen Modus
die gleichen Quads mit veränderten Positionen auf der Z-Achse im orthogonalen Modus
Zum Verlgeich: Die gleiche Reihe wie oben, nur mit veränderten Positionen auf der Z-Achse, wieder im perspektivischen Modus
Info DGL.png Wie üblich werden Objekte, die eine kleinere Z-Koordinate als znear bzw. eine größere als zfar haben, nicht gezeichnet.


Fehlermeldungen

  • GL_INVALID_VALUE wird generiert, wenn zNear gleich zFar, left gleich right oder top gleich bottom ist.
  • GL_INVALID_OPERATION wird generiert, wenn glOrtho innerhalb eines glBegin-glEnd-Blocks aufgerufen wird.


Zugehörige Werterückgaben

glGet mit Token GL_COLOR_MATRIX

glGet mit Token GL_MATRIX_MODE

glGet mit Token GL_MODELVIEW_MATRIX

glGet mit Token GL_PROJECTION_MATRIX

glGet mit Token GL_TEXTURE_MATRIX


Links

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

Siehe auch

glFrustum, glMatrixMode, glMultMatrix, glPushMatrix, glViewport, gluPerspective