我需要一种方式来获得欧拉角在从本地的全球参考框架旋转。 我使用C#,WPF 3D和陀螺仪。 我应该以同样的方式作为陀螺移动屏幕上的地球仪。 由于陀螺仪发送相对运动本身我需要使用四元数,以保持对象的状态和更新,但我坚持。 如果我做到以下几点:
var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z);
GlobalQu = Quaternion.Multiply(qu, GlobalQu);
IT在一个轴上旋转正常。 当我由A在一个方向上在彼此旋转,然后通过乙对象和陀螺仪的旋转是在相同方向上不再因为绝对旋转上述工程(相对于世界)。
例如:
var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3);
GlobalQu = qu;
这工作,因为我通过键盘总是在全球轴上增加了侧倾,俯仰,偏航即键盘值。 陀螺送当地的轴的旋转。
交换四元数旋转的顺序没有帮助
var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z);
GlobalQu = Quaternion.Multiply(GlobalQu,qu);