J'essaie d'écrire du code avec tourne un objet.
Je l'ai implémenté comme:
La rotation autour de l'axe X est donnée par la quantité de changement dans les coordonnées y d'une souris et la rotation autour de l'axe Y est donnée par la quantité de changement dans les coordonnées x d'une souris.
Cette méthode est simple et fonctionne très bien jusqu'à ce que l'axe coïncide avec l'axe Z, bref un blocage de gimble se produit.
Comment puis-je utiliser l'axe de rotation autour de l'axe Z pour éviter le blocage du cardan.
Réponses:
La solution simple est de ne pas stocker l'orientation de l'objet sous forme d'angles autour des axes (axes X, Y, Z), comme par exemple dans les angles d'Euler.
Stockez l'orientation de l'objet sous forme de matrice ou de quaternion.
Cela peut provoquer un blocage du cardan, en utilisant des angles euler:
Pas de verrouillage de cardan:
Pas de verrouillage de cardan non plus:
Maintenant, chaque fois que la souris est changée, multipliez m_orientation avec le changement d'orientation provenant du mouvement de la souris à chaque image.
la source
Ce livre (rendu en temps réel) m'a beaucoup aidé! Voir page 66 et 70. Il a de très bons graphiques et explications. Les quaternions sont également à la page 72! :)
Rotation autour d'un axe arbitraire
Cela rend la caméra avec la rotation effectuée par la souris:
Avec l'entrée de la souris, vous modifiez le lacet (tête), le tangage et le roulis.
la source