我需要一種方法來從本地獲取全局參照系中的歐拉角。我使用c#,wpf 3d和陀螺儀。我在屏幕上有一個地球儀,它應該像陀螺儀一樣移動。由於陀螺儀發送相對於自身的運動,我需要使用四元數來保持對象的狀態並更新它,但是我卡住了。如果我做以下操作:將本地四元數旋轉轉換爲全局(陀螺儀)
var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z);
GlobalQu = Quaternion.Multiply(qu, GlobalQu);
IT在一個軸上正確旋轉。當我在一個方向上旋轉A,然後在另一個方向上旋轉B時,物體和陀螺儀的旋轉不再處於相同的方向,因爲上面的絕對旋轉(相對於世界)起作用。
例如:
var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3);
GlobalQu = qu;
這工作,因爲我通過鍵盤總是在全球軸上增加了側傾,俯仰,偏航即鍵盤值。陀螺儀在LOCAL軸上發送旋轉。
交換四元數旋轉的順序不會幫助
var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z);
GlobalQu = Quaternion.Multiply(GlobalQu,qu);