Hier nochmal in abstrakter Form was du tun solltest:
Speicher die 'Sichtrichtung' des Spielers als Matrix. Quasi deine View-Matrix. Wenn du die Kamera drehen willst, berechne diese Matrix nicht neu sondern multipliziere sie mit einer neuen Matrix, die diese Drehung beinhaltet (also z.B. 2 Grad um die Z-Achse). Das Ergebnis ist dann deine neue Matrix.Ist das numerisch instabil, orthonormalisiere die Matrix ab und zu (wie oben beschrieben). Wenn du dich statt um die lokale um die globale Achse drehst, ändere die Reihenfolge der Matrixmultiplikation.
Ach so macht man das
Ich habe auf Basis "CameraPosition", "CameraTarget" und "AxisAngles" die ganze ViewMatrix jedesmal neu berechnet... In der "stabilen" Version. In der aufakkumulierten Version hab ich es ähnlich gemacht, nur dass ich "CameraPosition", "CameraTarget" und "AxisAngles" auch erstmal berechnet habe mit den Werten aus dem letzten frame...
D.h. ich verfahre so dann auch für die Kameraposition, ich gebe der View matrix eine translation mit und die Target und Position brauche ich nur einmal beim initialisieren des Programms?
Leuchtet mir ein... Kostet ja viel weniger so :p