J'ai besoin d'un moyen d'obtenir des angles d'Euler pour la rotation dans un cadre de référence global d'un local. J'utilise C#, wpf 3d et un gyroscope. J'ai un globe sur l'écran qui devrait se déplacer de la même manière que le gyroscope. Puisque le gyro envoie un mouvement par rapport à lui-même, j'ai besoin d'utiliser des quaternions pour garder l'état de l'objet et le mettre à jour mais je suis bloqué. Si je fais ce qui suit:Traduire Rotation de quaternion locale en global (gyro)
var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z);
GlobalQu = Quaternion.Multiply(qu, GlobalQu);
IT tourne correctement sur un axe. Quand je tourne par A dans un sens puis par B dans un autre les rotations de l'objet et du gyroscope ne sont plus dans le même sens car ce qui précède fonctionne pour des rotations absolues (par rapport au monde).
Par exemple:
var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3);
GlobalQu = qu;
Cela fonctionne parce que je suis, rallonger la course tangage, lacet-à-dire les valeurs de clavier via le clavier toujours sur l'axe global. Gyro envoie des rotations sur l'axe LOCAL.
Changement de l'ordre de rotation quaternion ne contribue pas
var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z);
GlobalQu = Quaternion.Multiply(GlobalQu,qu);