Larrywayn
Mitglied
Zunächst wünsche ich allen ein Frohes neues Jahr,
Ich hab ein kleines Verständnisproblem mit der Handhabung einer First Person Kamera.
Ich hatte damals eine Engine in JOGL geschrieben, also mit Opengl 1.x (Fixed-Function-Pipeline).
Dort war die Handhabung einer Kamera etwas einfacher als in WebGL, weil ich einfach die Winkel seperat gespeichert habe, in WebGL möchte ich aber lieber alles mit Matrizen lösen auch um die Übergabe an die Shader zu vereinfachen.
Ich nutze eine eigene Mathelibrary um flexibler zu sein und somit unnötiges weglassen kann. Meine Matrix ist Spaltenweise angeordnet:
Xp Yp Zp Wp ist enthält die Positioninformationen
Was ich mache:
hole Wert aus Matrix setze Spalte, Zeile auf alten Wert + (Bewegung vorhanden * Beschleunigung / FPSFaktor) addieren.
Sollte eigentlich recht logisch sein.
Wobei nur die letzte Zeile etwas macht, da der Vektor den ich nutze (0,0,1) ist. Also eine Verschiebung der Welt / Kamera in Z-Richtung (Y Zeigt nach oben Z nach vorne).
Bis hierher geht auch alles wunderbar auch die Rotation mit einer allgemeinen Rotationsmatrix aus den Mausbewegungen geht wunderbar.
Problem:
Das Problem ist die Vorwärtsbewegung, anstatt eines Fliegen-Modus einen First Person Modus zu erzielen.
Das heißt, dass ich mich nicht in die Blickrichtung der Kamera bewege sondern entlang eines Vektors der gerade nach vorne zeigt, also die Y-Komponente nicht beachtet, nach meinem Verständnis.
Beispiel: Ich gucke nach oben laufe aber dennoch nicht in die Luft sondern auf Bodenhöhe.
Ich habe es bisher geschafft mich auf den Globalen Achsen fix zu bewegen, was aber komisch wirkt, wenn man sich dreht.
Leider habe ich nur veraltete Tutorials gefunden, die meistens jegliche Informationen seperat speichern, als Pitch, Yaw, Roll. Das möchte ich vermeiden, weil ich es auch nicht wirklich brauche, dafür habe ich ja die Matrix.
Alle Ideen die mir logisch erschienen, Kreuzprodukte, Multiplikationen haben wenig sinnvolles gebracht. Meist nur undefinierte Ergebnisse.
Ich weiß, dass es eigentlich ganz einfach sein muss. Vielleicht hat es ja jemand verstanden und eine Idee
Mit freundlichen Grüßen
Larrywayn
Ich hab ein kleines Verständnisproblem mit der Handhabung einer First Person Kamera.
Ich hatte damals eine Engine in JOGL geschrieben, also mit Opengl 1.x (Fixed-Function-Pipeline).
Dort war die Handhabung einer Kamera etwas einfacher als in WebGL, weil ich einfach die Winkel seperat gespeichert habe, in WebGL möchte ich aber lieber alles mit Matrizen lösen auch um die Übergabe an die Shader zu vereinfachen.
Ich nutze eine eigene Mathelibrary um flexibler zu sein und somit unnötiges weglassen kann. Meine Matrix ist Spaltenweise angeordnet:
Code:
Xa Ya Za Wa
Xa Ya Za Wa
Xa Ya Za Wa
Xp Yp Zp Wp
Was ich mache:
Code:
this.modelViewMatrix.setzeWert(1, 4, this.modelViewMatrix.holeWert(1, 4) + (0 * ((this.accelerationBewegung * this.speed) / faktor)));
this.modelViewMatrix.setzeWert(2, 4, this.modelViewMatrix.holeWert(2, 4) + (0 * ((this.accelerationBewegung * this.speed) / faktor)));
this.modelViewMatrix.setzeWert(3, 4, this.modelViewMatrix.holeWert(3, 4) + (1 * ((this.accelerationBewegung * this.speed) / faktor)));
Sollte eigentlich recht logisch sein.
Wobei nur die letzte Zeile etwas macht, da der Vektor den ich nutze (0,0,1) ist. Also eine Verschiebung der Welt / Kamera in Z-Richtung (Y Zeigt nach oben Z nach vorne).
Bis hierher geht auch alles wunderbar auch die Rotation mit einer allgemeinen Rotationsmatrix aus den Mausbewegungen geht wunderbar.
Problem:
Das Problem ist die Vorwärtsbewegung, anstatt eines Fliegen-Modus einen First Person Modus zu erzielen.
Das heißt, dass ich mich nicht in die Blickrichtung der Kamera bewege sondern entlang eines Vektors der gerade nach vorne zeigt, also die Y-Komponente nicht beachtet, nach meinem Verständnis.
Beispiel: Ich gucke nach oben laufe aber dennoch nicht in die Luft sondern auf Bodenhöhe.
Ich habe es bisher geschafft mich auf den Globalen Achsen fix zu bewegen, was aber komisch wirkt, wenn man sich dreht.
Leider habe ich nur veraltete Tutorials gefunden, die meistens jegliche Informationen seperat speichern, als Pitch, Yaw, Roll. Das möchte ich vermeiden, weil ich es auch nicht wirklich brauche, dafür habe ich ja die Matrix.
Alle Ideen die mir logisch erschienen, Kreuzprodukte, Multiplikationen haben wenig sinnvolles gebracht. Meist nur undefinierte Ergebnisse.
Ich weiß, dass es eigentlich ganz einfach sein muss. Vielleicht hat es ja jemand verstanden und eine Idee

Mit freundlichen Grüßen
Larrywayn