LookAt-Funktion: ich werde verrückt,
Muss ich noch die Hausaufgaben, und ich versuche zu realisieren eine lookAt-Funktion. Ich habe versucht, viele Möglichkeiten, aber das einzige Ergebnis bekam ich einen blauen Bildschirm. Der rest von meinem Programm arbeitet stark, infact, wenn ich mit glm::lookAt alles ist gut. Das ist mein code:
mat4 Transform::lookAt(const vec3 &eye, const vec3 ¢er, const vec3 &up)
{
vec3 w(glm::normalize(eye - center)) ;
vec3 u(glm::normalize(glm::cross(up, w)));
vec3 v(glm::cross(w, u)) ;
mat4 ret = mat4 (
vec4 (u.x,v.x,w.x,0),
vec4 (u.y,v.y,w.y,0),
vec4 (u.z,v.z,w.z,0),
vec4 (-u.x*eye.x-u.y*eye.y-u.z*eye.z,
-v.x*eye.x-v.y*eye.y-v.z*eye.z,
-w.x*eye.x-w.y*eye.y-w.z*eye.z,
1)
);
return ret;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sah ich Sie den glm-Bibliothek für matrix-Operationen, also von der glm-code der lookat-Implementierung sieht wie folgt aus:
Du zuerst normalisieren der Vektoren, die Sie verwenden(f ist die Richtung, die Sie betrachten, u die up-und s ist der richtige Vektor). Dann, um sicherzustellen, dass die up-Vektor ist, die senkrecht zu den Richtung und Recht Vektoren Sie neu berechnen es als Ihre cross-Produkt, weil, wenn Sie geben eine up-Vektor Sie können nicht sicherstellen, dass die senkrecht zu der eye-center vector(Blickrichtung), Sie sind nur einer Ebene, die Ihnen die Recht vector.
Die matrix konstruiert wird, ist aus diesen. Für mehr detail, wie funktioniert es überprüfen http://www.songho.ca/opengl/gl_transform.html Seite.
Kurz gesagt:dies ist eine matrix, die schafft Sie ein neues Koordinatensystem, so sind die Spalten sind die Achsen. Dann in der letzten Spalte die übersetzung matrix angewendet.
(Blick auf die Identität matrix:
Dies gibt Ihnen die standard-Koordinatensystem mit keine übersetzung.)
Dann multiplizieren Sie diese mit Projektions-und model-Matrix (p*v*m), die Reihenfolge ist wichtig.
Wenn Sie schreiben, Ihre Umsetzung stellen Sie sicher, Sie verwenden die Spalte major Matrizen, wegen opengl, oder transponieren.
Ich hoffe, es hilft.