gluLookAt: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
K (Beschreibung: glMulMatrixf -> glMultMatrixf)
 
(8 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Offline}}
+
= gluLookAt =
 +
 
 +
<br>
 +
== Name ==
 +
'''gluLookAt''' - Definiert eine Betrachtertransformation.
 +
 
 +
<br>
 +
== Delphi-Spezifikation ==
 +
procedure '''gluLookAt'''(''eyex'', ''eyey'', ''eyez'', ''centerx'', ''centery'', ''centerz'', ''upx'', ''upy'', ''upz'' : glDouble);
 +
 
 +
<br>
 +
 
 +
== Parameter ==
 +
 
 +
{| border="1" rules="all"
 +
! ''eyeX, eyeY, eyeZ''
 +
| Gibt die Position des Betrachters an.
 +
|-
 +
! ''centerX, centerY, centerZ''
 +
| Gibt die Position des Refernenzpunktes an, auf den "geblickt" wird.
 +
|-
 +
! ''upX, upY, upZ''
 +
| Gibt die Richtung des Vektors an, der nach oben zeigt.
 +
|}
 +
 
 +
<br>
 +
 
 +
== Beschreibung ==
 +
'''gluLookAt''' erstellt eine Betrachtungsmatrix aus einem Betrachterpunkt (''eyeX'', ''eyeY'' und ''eyeZ''), einem Referenzpunkt der den Mittelpunkt der zu betrachtenden Szene darstellt (''centerX'', ''centerY'' und ''centerZ'') und einem nach oben zeigenden Vektor (''upX'', ''upY'', ''upZ'', auch "Up-Vektor" genannt).
 +
 
 +
Die Matrix legt den Referenzpunkt auf die negative Z-Achse und den Betrachterpunkt als Ursprung. Wenn eine (normale) Projektionsmatrix genutzt wird, wird das Zentrum der zu betrachtenden Szene auch auf das Zentrum des Viewports gelegt. Die vom "Up-Vektor" beschriebene (und auf die Betrachtungsfläche gelegte) Richtung wird auf die positive Y-Achse gelegt, so dass dieser im Viewport nach oben zeigt (daher "Up-Vektor). Dieser Vektor darf nicht parallel zur Sichtlinie vom Betrachtungspunkt zum Referenzpunkt liegen!
 +
 
 +
Wenn
 +
 
 +
    | CenterX - EyeX |
 +
''F'' = | CenterY - EyeY |
 +
    | CenterZ - EyeZ |
 +
 
 +
Und ''UP'' gleich dem Up-Vektor (upX, upY, upZ) ist, dann wird wie folgt normalisiert :
 +
 
 +
''f'' = F / ||F||
 +
 
 +
und
 +
 
 +
''UP<nowiki>'</nowiki>''  = UP / ||UP||
 +
 
 +
 
 +
Wenn dann noch
 +
 
 +
  ''s<nowiki>'</nowiki>'' = ''f'' x UP<nowiki>'</nowiki>
 +
 
 +
  ''s'' = ''s<nowiki>'</nowiki>'' / ||''s<nowiki>'</nowiki>''||
 +
 
 +
und
 +
 
 +
  ''u'' = ''s'' x ''f''
 +
 
 +
dann wird die Matrix ''M'' wie folgt aussehen :
 +
 +
    |  s[0]  s[1]  s[2]  0 |
 +
M = |  u[0]  u[1]  u[2]  0 |
 +
    | -f[0] -f[1] -f[2]  0 |
 +
    |  0    0    0    1 | 
 +
 +
und '''gluLookAt''' ist dann gleich :
 +
<source lang="pascal"> glMultMatrixf(@M[0,0]);
 +
glTranslated(-EyeX, -EyeY, -EyeZ);</source>
 +
<br>
 +
 
 +
{{Hinweis|In der [http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/lookat.html offiziellen OpenGL-Manpage] fehlt die Angabe das s<nowiki>'</nowiki> normalisiert werden muss. Siehe [[Diskussion:gluLookAt|Diskussion]].}}
 +
 
 +
== Siehe auch ==
 +
[[glFrustum]], [[gluPerspective]]
 +
 
 +
[[Kategorie:GLU|LookAt]]

Aktuelle Version vom 12. September 2013, 14:02 Uhr

gluLookAt


Name

gluLookAt - Definiert eine Betrachtertransformation.


Delphi-Spezifikation

procedure gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz : glDouble);


Parameter

eyeX, eyeY, eyeZ Gibt die Position des Betrachters an.
centerX, centerY, centerZ Gibt die Position des Refernenzpunktes an, auf den "geblickt" wird.
upX, upY, upZ Gibt die Richtung des Vektors an, der nach oben zeigt.


Beschreibung

gluLookAt erstellt eine Betrachtungsmatrix aus einem Betrachterpunkt (eyeX, eyeY und eyeZ), einem Referenzpunkt der den Mittelpunkt der zu betrachtenden Szene darstellt (centerX, centerY und centerZ) und einem nach oben zeigenden Vektor (upX, upY, upZ, auch "Up-Vektor" genannt).

Die Matrix legt den Referenzpunkt auf die negative Z-Achse und den Betrachterpunkt als Ursprung. Wenn eine (normale) Projektionsmatrix genutzt wird, wird das Zentrum der zu betrachtenden Szene auch auf das Zentrum des Viewports gelegt. Die vom "Up-Vektor" beschriebene (und auf die Betrachtungsfläche gelegte) Richtung wird auf die positive Y-Achse gelegt, so dass dieser im Viewport nach oben zeigt (daher "Up-Vektor). Dieser Vektor darf nicht parallel zur Sichtlinie vom Betrachtungspunkt zum Referenzpunkt liegen!

Wenn

    | CenterX - EyeX |
F = | CenterY - EyeY |
    | CenterZ - EyeZ |

Und UP gleich dem Up-Vektor (upX, upY, upZ) ist, dann wird wie folgt normalisiert :

f = F / ||F||

und

UP'  = UP / ||UP||


Wenn dann noch

 s' = f x UP'
 s = s' / ||s'||

und

 u = s x f

dann wird die Matrix M wie folgt aussehen :

    |  s[0]  s[1]  s[2]  0 |
M = |  u[0]  u[1]  u[2]  0 |
    | -f[0] -f[1] -f[2]  0 |
    |   0     0     0    1 |  

und gluLookAt ist dann gleich :

 glMultMatrixf(@M[0,0]);	
 glTranslated(-EyeX, -EyeY, -EyeZ);


Info DGL.png In der offiziellen OpenGL-Manpage fehlt die Angabe das s' normalisiert werden muss. Siehe Diskussion.

Siehe auch

glFrustum, gluPerspective