Soweit ich das verstanden habe gibt es drei häufig verwendete Möglichkeiten 3D-Rotation darzustellen, die Euler Winkel(yaw, pitch, roll), Quaternions(x, y, z, w) und Rotationsmatrizen(3x3). Da die Euler Winkel von "gimbal lock" betroffen sind wollte ich Quaternions benutzen weil sie weniger Speicher verbrauchen und die Rechenoperationen schneller sind als bei einer 3x3 Matrix.
Die Kugelkoordinaten sehen intressant aus aber um das ganze wieder in eine Rotationsmatrix zu wandeln (die XNA ja in den Shadern braucht?) sind eine Menge sin() und cos() nötig und ich seh dabei keine roll Rotation (oder hab ich die nur übersehen?), daher werde ich erstmal die anderen Wege versuchen.
Wenn es den anderen so geht wie mir, hat niemand überhaupt verstanden, was Dein Problem ist. "Verschiebt sich alles", "nicht mehr Y, sondern X Achse"... sorry, um was geht's?
Ok dann versuch ich es nochmal anders zu erklären: Wenn ich starte (Rotation = Quaternion.Identity) funktioniert die Rotation wie sie soll(wenn ich mit der Maus eine "nickende" Geste mache wird das ganze auch auf dem Bildschirm so umgesetzt). Wenn ich dann ein paar mal mit der Maus eine Kreisbewegung mache und dann erneut die Maus von mir weg/zu mir hin bewege wird das ganze auf dem Bildschirm in ein "kopfschütteldes Nein" übersetzt (also die Kamera fährt von links nach rechts statt von oben nach unten).
Du könntest z.b. versuchen, die Reihenfolge in 'tempRot = _transform.Rotation * tempRot;' zu ändern.
Das scheint solange zu funktionieren wie die Kamera sich an { 0, 0, 0 } befindet, wenn die Kamera sich zb. bei { 64, 10, 40 } befindet wird aus dem "auf und ab gucken" eine kreisende Bewegung. Ich glaube ich werde einfach mit 3x3 Matrizen arbeiten die scheinen wenigstens das zu machen was man erwartet