Bonjour !
Voilà quelques heures que je cherche à effectuer une opération mathématique avec des quaternions.
J'aimerais vraiment maitriser le sujet pour ne plus avoir de problème mais il faut croire que ce n'est pas encore le cas.
Mon problème (exemple):
J'ai un avion et un pilote. Alors que l'Avion grimpe à la vertical dans le ciel, le pilote (la camera) veut tourner la tête à droite pour admirer le beau soleil couchant...
Mon projet est en C++, j'ai une class "standard" de Quaternion style: http://willperone.net/Code/quaternion.php
Je sais comment effectué une rotation de quaternion selon l'axe local
ainsi que selon l'axe global:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [...] Quaternion quatCalc; quatCalc.FromEulerAngles( DEGTORAD( rotation.x ), DEGTORAD( rotation.y ), DEGTORAD( rotation.z ) ); quatCalc.Normalize(); quatCurrentRotation = quatCurrentRotation * quatCalc; [...]
Les rotations des objets sont donc représenté par des quaternions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [...] Quaternion quatCalc; quatCalc.FromEulerAngles( DEGTORAD( rotation.x ), DEGTORAD( rotation.y ), DEGTORAD( rotation.z ) ); hQuatCalc.Normalize(); quatCurrentRotation = quatCalc * quatCurrentRotation; [...]
Comment peut-on effectuer la rotation du quaternion du pilote selon le repère définit par la rotation du quaternion de son avion (son parent) ?
Je pensais pouvoir le faire simplement, comme les autres opérations, mais avec cette fois-ci:
...sans resultat...
Code : Sélectionner tout - Visualiser dans une fenêtre à part quatCurrentRotation = parent.quatInvCurrentRotation * quatCalc * quatCurrentRotation * parent.quatCurrentRotation;
une idée ?
Partager