我需要一种方法来从本地获取全局参照系中的欧拉角。我使用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);