Bonjour,
Je reviens sur un probleme assez connu, mais je ne m'en sort pas malgré tout et j'ai besoin d'avis plus élairés sur la question...
J'ai un objet 3D qui a son propre repere (il a une normale, un vecteur side, un vecteur up... ) un peu comme une camera en 3D quoi.
Je dois appliquer cet objet à un endroit précis (désigné par une normale et une position) et donc je galere sur le calcul de la transformation à lui appliquer.
Le changement de position est enfantin, mais le calcul de la rotation à appliquer me pose des problemes :
Si je calcule la rotation pour faire coïncider les normales (celle de l'objet et celle que je dois avoir apres transformation) alors j'ai bien la correspondance des normales. Par contre, mon objet 3D, meme en ayant la normale dans la bonne direction, peut encore avoir une rotation autour de la normale qui est aléatoire.
C'est un phenomene attendu si on le regarde de plus pres. la rotation calculé est une simple rotation qui en prend en compte qu'un objectif.
Cependant, j'ai aussi besoin que mon axe principal de mon objet soit dans le plan YZ (pour que quelque soit la normale, l'objet soit toujours dans le meme plan)
Or, si je calcule et applique la 2eme transformation, la 1ere se trouve affectée et au final mon objet n'a pas vraiment la bonne orientation.
Je cherche donc un moyen de calculer la matrice/quaternion de rotation d'un repere A vers le repere B. je connais l'expression des 3 vecteurs dans les deux reperes.
J'ai donc fait une matrice colonne
avec X Y et Z étant mes nouveaux vecteurs dans le repere B... mais encore une fois c'est comme si une seule des rotation était prise en compte...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 osg::Matrix rotation_matrix( X[0], Y[0], Z[0], 0.0f, X[1], Y[1], Z[1], 0.0f, X[2], Y[2], Z[2], 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
Vous feriez comment vous ? vous voyez des erreur dans le raisonnement ?
Merci.
Partager