J'ai un plan dans un monde 3D et son orientation est enregistrée de quelque façon que ce soit (par exemple, tangage, lacet et roulis). Maintenant quand je veux que l'avion tourne à gauche, mais glRotatef ne fait pas le travail car il colle aux coordonnées globales et ne se soucie pas de la rotation de l'avion, et simplement changer le lacet n'aide pas non plus car ce n'est pas non plus par rapport aux plans de rotation réels et ne signifierait "gauche" que lorsque l'avion vole directement à l'horizon. Ce que je aurais besoin serait comme ceci:Activer un maillage en fonction de ses coordonnées locales
float pitch = 10 , yaw = 20, roll = 30; //some initial values
Turn(&pitch, &yaw, &roll , 5, 0 , 0) //calculate new pitch, yaw and roll as if
//the plane had turned 5 degrees to the right (relative to its current orientation and roll!)
//pitch, yaw and roll are updated to reflect the new orientation.
Beaucoup de gens suggèrent l'utilisation de Quaternions, mais je ne sais pas sur la façon de les mettre en œuvre une fonction Turn (un exemple de travail est Blitz3D, qui a une fonction « RotateEntity » pour la rotation globale comme glRotatef et « TurnEntity » pour la rotation en fonction de l'orientation) Je pense que la fonction fonctionne en interne comme ceci:
- transform tangage, lacet, roulis à un Quaternion comme EulerToQuat dans OpenGL + SDL rotation around local axis
- effectuer la rotation locale en utilisant Quaternio n mathématiques (aucune source trouvée)
- transforment Quaternion retour à lacet, roulis, tangage (pas source trouvée)
ce n'est pas le quaternion qui résout le problème c'est l'accumulation de petites rotations qui résout le problème, la raison pour laquelle les quaternions sont utilisées est qu'une matrice va obtenir des erreurs d'arrondis qui pourraient s'accumuler, tandis qu'un quaternion peut être normalisé facilement ... Cela pourrait expliquer mieux: http://www.arcsynthesis.org/gltut/Positioning/Tutorial%2008.html, lisez le chapitre et l'utilisation des quaternions pourrait devenir un peu plus claire, espoir cela aide = D –
Merci Luke, le tutoriel a aidé un peu :-) (La force pourrait être avec vous ...) – Kenobi
Bon, heureux d'aider ... –