Bonjour tout le monde,
J'ai un objet 3D dans un espace 3D (jusque là tout est logique). J'ai différentes vues (avec des orientations différentes) et je souhaite faire une rotation de mon objet en fonction de la normale de ma vue et le centre de l'objet.
J'ai une boite englobante autour de mon objet avec des points d'accroches à chaque coin de la boite. Pour effectuer une rotation, l'utilisateur doit cliquer avec la souris sur un de ces points d'accroche (en restant cliqué).
Pour effectuer la rotation de mon modèle, je suis les étapes suivantes :
- Récupération des positions de la souris (à t-1 et t, notons les p(t-1) et p(t))
- Passage de la position souris en coordonnées écran
- Passage des coordonnées écran en coordonnées monde
- Calcul de l'angle en utilisant le produit scalaire (cos(tetha) = p(t-1) . p(t) / (|p(t-1)| * |p(t)|) )
- Inversion du signe de l'angle en fonction du produit scalaire entre la normale de la vue et le produit vectoriel des deux vecteurs formés par les positions de la souris
- Application de la matrice de rotation à mon modèle de la manière suivante: translation_vers_le_centre * rotation * translation_inverse * modèle
J'ai plusieurs problèmes: le modèle ne "tourne" pas en même temps que ma souris, la rotation est inversé par moment.
Est-ce que mon approche est fausse? Avez-vous des pistes pour résoudre mes problèmes?
Merci
Partager