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