Ich habe eine 3D-Kamera, deren aktuelle Rotation als Quaternion gespeichert ist, und ich habe Probleme, sie richtig zu drehen. Ich möchte, dass die Kamera inkrementell um ihre lokalen Achsen rotiert, basierend auf der Bewegung der Maus in jedem Frame (First-Person-Shooter-Stil), aber die Rotation ist falsch. Es funktioniert irgendwie, aber die Kamera scheint um ihre Vorwärtsachse zu rollen, wenn es nicht sollte.
Ich aktualisiere die Rotation jedes Frames mit dieser Funktion:
%Vor%Hier ist meine Quaternion-Multiplikationsfunktion:
%Vor%Tue ich etwas falsch oder ist das eine Art Gleitkommafehler?
habe das Problem herausgefunden. Für eine mausgesteuerte First-Person-Kamera wie die, die ich suche, möchte ich um die lokale x-Achse rotieren, um nach oben und unten zu schauen, aber die globale y-Achse, um von einer Seite zur anderen zu schauen.
Das ist also richtig für die x-Achse:
%Vor%Aber ich muss dies für die y-Achse tun:
%Vor%Weil ich kein funktionierendes Beispiel finden konnte, wie man eine First-Person-Kamera mit DirectXMath einrichtet, und weil ich zwei Tage an meiner Lösung gearbeitet habe, habe ich beschlossen, meine Lösung hier zu posten. Vielleicht gibt es jemanden, der an dem gleichen Problem arbeitet. Meine Lösung ist nicht so optimiert, aber die Mathematik dahinter sollte stimmen.
%Vor%