Convertir la rotation du Quaternion en matrice de rotation?
Fondamentalement, compte tenu d'une quaterion (qx, qy, qz, qw)... Comment puis-je convertir que un OpenGL matrice de rotation? Je suis aussi intéressé par la matrice dont la ligne est "Up", "Droite", "en Avant", etc... j'ai une rotation de la caméra dans le quaternion que j'ai besoin de vecteurs...
source d'informationauteur Polaris878
Vous devez vous connecter pour publier un commentaire.
Le code suivant est basé sur un quaternion (qw, qx, qy, qz), où l'ordre est basé sur la relance de quaternions:
Vous devez d'abord normaliser le quaternion:
Ensuite, vous pouvez créer votre matrice:
En fonction de votre classe matrix, vous pourriez avoir à transposer avant de passer à OpenGL.
Une façon de le faire, ce qui est assez facile à visualiser, à l'est d'appliquer la rotation spécifié par votre quaternion pour les vecteurs de base (1,0,0), (0,1,0) et (0,0,1). La rotation de valeurs
donner les vecteurs de base dans le système de rotation par rapport au système d'origine. L'utilisation de ces
vecteurs pour former les lignes de la matrice de rotation. La matrice résultante, et sa transposition,
représenter l'avant et inverse de transformations entre le système d'origine et la
rotation du système.
Je ne suis pas familier avec les conventions utilisées par OpenGL, donc peut-être que quelqu'un d'autre peut répondre
cette partie de votre question...
Vous pourriez ne pas avoir à traiter avec une matrice de rotation. Voici une manière qui semble être plus rapide que la conversion d'une matrice et de la multiplication d'un vecteur:
[1] http://mollyrocket.com/forums/viewtopic.php?t=833&sid=3a84e00a70ccb046cfc87ac39881a3d0
à l'aide de glm, vous pouvez simplement utiliser un opérateur de coulée.
pour convertir à partir d'un matrix4 de quaternion, il suffit d'écrire
glm::mat4_cast(quaternion_name)