/ / Matrice de rotation entre deux espaces - matrice, graphiques, 3d, rotation, systèmes de coordonnées

Matrice de rotation entre deux espaces - matrice, graphiques, 3d, rotation, systèmes de coordonnées

Je travaille pour intégrer l'hydre Razer dans monprojet. L'intégration n'est pas difficile et les fonctions de base fonctionnent déjà bien. Néanmoins, j’ai un problème et je ne peux pas le résoudre moi-même. C’est une question de rotation. Le problème est que l’espace SDK Sixense et mon espace ne sont pas identiques. Mais la seule différence est le signe de l’axe Z. Ici vous pouvez le voir sur une photo pour une meilleure compréhension:

http://imgur.com/UShwRIA

Maintenant, je reçois une matrice de rotation 3x3 de chaque contrôleur hydra. Mais pour l'utiliser, je dois convertir la matrice de rotation en une matrice de rotation pour mon espace. Je le fais comme ça:

  float (*mat)[3];
mat = hydra.controllerRight.rot_mat;

float x1 = mat[0][0];
float x2 = mat[0][1];
float x3 = mat[0][2];
float x4 = 0;

float y1 = mat[1][0];
float y2 = mat[1][1];
float y3 = mat[1][2];
float y4 = 0;

float z1 = mat[2][0];
float z2 = mat[2][1];
float z3 = mat[2][2];
float z4 = 0;

float w1 = 0;
float w2 = 0;
float w3 = 0;
float w4 = 1;

// my 4x4 rotation matrix
MatrixF rotMat( x1, x2, x3, x4,
y1, y2, y3, y4,
z1, z2, z3, z4,
w1, w2, w3, w4 );

Maintenant, bien sûr, les résultats en utilisant cette rotationla matrice est fausse. Mais je ne peux pas savoir quoi faire pour résoudre ce problème. J'ai essayé une multitude de configurations, en commençant par inverser les valeurs z par rapport à la transposition de la matrice, car je ne suis pas sûr de la structure de la matrice Sixense.

Quelqu'un peut m'aider ici?

Réponses:

0 pour la réponse № 1

Je suppose que la matrice Sixense est une sorte de transformation de modèle. Cette transformation vous est donnée dans l’espace A (l’espace à six chiffres) et vous souhaitez représenter la transformation dans l’espace B (votre espace).

Vous savez que la transformation du système entre les deux espaces est une simple matrice de réflexion:

          / 1  0  0  0 
T(B<-A) = | 0  1  0  0 |
| 0  0 -1  0 |
 0  0  0  1 /

Convertir votre modèle dans l’espace A M_A à un modèle transformer dans l'espace B M_B, il faut multiplier:

M_B = T(B<-A) * M_A

Cela équivaut à nier la troisième ligne de la matrice M_A (en supposant une matrice colonne-majeur). On dirait que ça pourrait être tout zs dans votre code. Mais cela pourrait aussi bien être tout ..3s.