Bitte, vergib mir, aber ich brauche Hilfe und bin seit ein paar Wochen dabei. Ich mache keine Fortschritte und überall, wo ich hingehe und eine andere Antwort sehe, funktioniert alles, was ich versuche, nicht. Ich hatte genug Tipps und Ratschläge, jetzt brauche ich wirklich nur noch jemanden, der mir die Antwort gibt, damit ich rückwärts arbeiten kann, weil ich das nicht verstehen kann.
Was dieses Thema am verwirrendsten gemacht hat, ist die Art und Weise, wie jeder andere Konventionen oder Regeln verwendet und ihre Antworten auf seinen eigenen Konventionen basieren, ohne zu definieren, was sie sind.
Hier sind die Konventionen, die ich basierend auf den häufigsten und logischsten Konventionen gebildet habe:
- Rechte Regel für die Achse.
- Positives Y ist oben, Positives Z ist dem Betrachter zugewandt, Positives X ist rechts.
- Row Major-Matrizen, transponiert, wenn sie an Shader gesendet werden.
- Pitch: Drehung um die X-Achse
- Gieren: Drehung um die y-Achse
- Rolle: Drehung um die z-Achse
- Rotationsreihenfolge: Rollen, Neigen, Gieren (ist das richtig? Kann mich jemand darauf überprüfen?)
- Positive Rotationswerte vom positiven Ende einer Achse nach unten führen zu einer Rotation im Uhrzeigersinn.
- Die Standardrichtung für die Drehung um 0 über alle Achsen ist ein Vektor, der auf das negative Y zeigt.
.. wie funktioniert man angesichts dieser Konventionen (korrigieren Sie mich auf jeden Fall, wenn sie falsch sind!):
- Eine LookAt-Funktion schreiben? (lookAt (Vektorposition, Vektoraugenfokus, Vektor nach oben))
- Berechnen Sie eine Rotationsmatrix. (Drehung (x, y, z))
Ich habe versucht, diese beiden Fragen mindestens in den letzten 3 Wochen selbst zu beantworten. Ich habe meine LookAt & Rotation Matrix-Funktion mindestens 30 Mal neu geschrieben, Dutzende von Methoden getestet und Material durchgelesen, das ich gesehen habe Hunderte von Websites und viele beantwortete Fragen gelesen, den Code anderer Leute kopiert, und nichts, was ich bisher gemacht habe, hat funktioniert, alles hat das falsche Ergebnis hervorgebracht. Einige davon haben einige unglaublich bizarre Ausgaben erzeugt, die nicht einmal annähernd der korrekten Rotation entsprechen.
Ich habe jede Nacht daran gearbeitet, mit Ausnahme der letzten Nacht, weil ich von dem wiederholten Versagen so frustriert war, dass ich anhalten und eine Pause machen musste.
Bitte zeigen Sie mir einfach, was die richtige Methode ist, damit ich rückwärts arbeiten und herausfinden kann, wie es funktioniert. Ich bekomme einfach nicht die richtige Antwort und das macht mich ein bisschen verrückt!
Ich schreibe in Java, aber ich nehme Code, der in einer beliebigen Sprache geschrieben ist. Der größte Teil meines 3D-Rendering-Codes funktioniert tatsächlich ziemlich hervorragend. Es ist nur die Mathematik, die ich nicht verstehen kann.
UPDATE: Gelöst
Danke für deine Hilfe! Ich habe jetzt eine funktionierende LookAt-Funktion, die ich tatsächlich verstehe und ich könnte nicht glücklicher sein (wenn jemand sie auf jeden Fall sehen möchte, fragen Sie).
Ich habe erneut versucht, eine Rotationsmatrix zu erstellen, die auf Pitch / Yaw / Roll-Variablen basiert, und es schien erneut zu scheitern, aber ich habe mich entschlossen, den Versuch, Euler-Winkel für die Freelook-Kamera zu verwenden, zu löschen, da sie für die Kamera ungeeignet zu sein scheint Rolle, stattdessen werde ich eine Quaternionsklasse erstellen, könnte besseres Glück haben, diesen Weg zu gehen, andernfalls werde ich die Tonhöhe / Gier als sphärische Koordinaten verwenden und mich für die Rotation auf die neue funktionierende LookAt-Funktion verlassen.
Wenn jemand anderes vor einem ähnlichen Problem steht und mir Fragen stellen möchte, wenden Sie sich bitte an.
Zumindest stecke ich nicht mehr fest, danke für die Hilfe!
float[16]
.