Bonjour,
Comme l'indique le titre du post j'ai quelques petits problèmes à l'utilisation des quaternions et des matrices, et plus précisement la transformation du premier en second.
Je précise que je travaille avec OpenGL et ce que je cherche à obtenir la matrice de transformation inverse (pour l'exprimer à une caméra...) en sachant que le quaternion correspond à la matrice non-inversée...
Comme vous l'aurez compris 'quat' est un quaternion normé(w, x, y, z), 'scale' et 'pos' les vecteurs d'échelle et de position...Vous remarquerez aussi sans doute j'utilise la transposition de la matrice de rotation et l'opposé du vecteur de translation pour obtenir la transformation inverse...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 //Colonne X matrix[0] = (1-2*quat.y*quat.y-2*quat.z*quat.z) * scale.x; matrix[1] = (2*quat.x*quat.y-2*quat.w*quat.z) * scale.x; matrix[2] = (2*quat.x*quat.z+2*quat.w*quat.y) * scale.x; matrix[3] = 0.0f; //Colonne Y matrix[4] = (2*quat.x*quat.y+2*quat.w*quat.z) * scale.y; matrix[5] = (1-2*quat.x*quat.x-2*quat.z*quat.z) * scale.y; matrix[6] = (2*quat.y*quat.z+2*quat.w*quat.x) * scale.y; matrix[7] = 0.0f; //Colonne Z matrix[8] = (2*quat.x*quat.z-2*quat.w*quat.y) * scale.z; matrix[9] = (2*quat.y*quat.z+2*quat.w*quat.x) * scale.z; matrix[10] = (1-2*quat.x*quat.x-2*quat.y*quat.y) * scale.z; matrix[11] = 0.0f; //Colonne des translations matrix[12] = -pos.x; matrix[13] = -pos.y; matrix[14] = -pos.z; matrix[15] = 1.0f;
Le problème: à l'affichage l'utilisation des commandes de rotations m'aplatissent l'espace et les commandes de translations agissent sans encombres mais je ne comprends pas pourquoi...
Dans la FAQ Quaternions il y "conjugué = inverse" or en se reportant à la page Wikipedienne il y a bien deux significations distinctes...
Partager