2013-07-19 3 views
0

J'ai la matrice suivante dans un jeu que je fais de l'ingénierie inverse pour voir comment cela fonctionne.Obtenir des angles à partir de ModelViewMatrix

j'ai réussi à capturer cette matrice lorsqu'un modèle est rendu:

 0.999971,  0.003148,  -0.006994, 0.000000 
    0.000000,  0.911863,  0.410494, 0.000000 
    0.006903, -0.410485,  0.911844, 0.000000 
-25014.388672, 11944.956055, -19475.357422, 1.000000 

j'ai commencé à calculer l'angle à l'aide de ce qui suit:

Point CalculateRotatation(float ModelView[16]) 
{ 
    Point Result; 
    Result.X = atan2(ModelView[9], ModelView[10]) * (180/PI); 
    Result.Y = atan2(-ModelView[8], ModelView[9]) * (180/PI); 
    Result.Z = atan2(ModelView[4], ModelView[0]) * (180/PI); 
    return Result; 
} 

Je suivais: http://db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/

Je Je ne sais pas si je le fais correctement. Le jeu n'utilise pas OpenGL-ES mais je ne suis pas sûr que cela compte. Est-ce que l'un d'entre vous peut me dire si je suis sur le bon chemin ou si ma fonction Calculer est correcte? La valeur Y semble être incorrecte. Je sais qu'il y a beaucoup de choses comme ça et j'ai regardé à travers eux mais ils ne semblent pas faire ce que j'ai. Ils utilisent des produits scalaires et des produits croisés. J'ai juste besoin de confirmation ou d'un peu d'aide.

EDIT: Je sais ceci:

Je sais que les calculs pour les rotations X et Y sont corrects. Si je change la vue de mon personnage de gauche à droite, le Z augmente/diminue. Si je change la hauteur de vue de mon personnage, le X augmente/diminue. Y mais je ne sais pas si elle est juste ou comment l'obtenir .. J'ai ce schéma: enter image description here

+0

connaissez-vous le modèle et la matrice de vue? – yngccc

+0

Assurez-vous de bien vérifier la colonne majuscule/rangée majeure, c'est toujours un endroit pour les écarts. –

+0

Je ne connais pas les deux matrices séparément. J'ai mis à jour OP avec tout ce que je sais à coup sûr. – Brandon

Répondre

3

angles fixes de extraction matrice de rotation peut avoir plusieurs réponses, car il implique les trigonométrique inverse et une racine carrée . Par exemple, si la séquence de rotation est x-y-z (avec un système de vecteur ligne), la formule est comme ci-dessous.

AngleX = atan2(m11, m22) 
AngleY = atan2(-m02, sqrt(m00^2 + m01^2)) 
AngleZ = atan2(m01, m00) 

Mais, ce n'est pas la fin de l'histoire. Je suis sûr que this article vous aidera à trouver un meilleur moyen. Bonne chance!

+0

Exactement ce que j'essayais de faire :) Pouvez-vous m'aider avec une chose. Mon ami a dit exactement la même chose que vous. Il a fait la même chose que vous: http://pastebin.com/ngusJifF Excepté les indices X, Y sont permutés. Je pense que ce que vous faites avec la matrice 2D est la même chose que j'ai fait avec une matrice 1D. – Brandon

Questions connexes