2012-04-24 1 views
1

Je fais un petit jeu dans lequel je veux lancer un objet dans la direction vers laquelle je fais face. Le problème est que mon orientation (caméra) est déterminée par la matrice modèle/vue. Et cette matrice est fournie par le système (sur le périphérique android).Vecteur d'orientation de la caméra OpenGL à partir de la matrice modèle/vue

Comment puis-je calculer un vecteur qui servira de vecteur de vitesse pour mon objet projeté?
J'ai essayé de multiplier quelques vecteurs avec la matrice, mais les résultats ne me donnent pas la moindre idée de la façon d'accomplir cela. La matrice contient uniquement une partie rotative (pas d'échelle, d'inclinaison ou de translation).
Je travaille avec OpenGL ES 1.1, mais cela n'a probablement pas d'importance.

Après this answer J'ai été capable d'obtenir des angles de rotation autour de chaque axe, mais je ne sais toujours pas comment construire mon vecteur de vitesse.

EDIT: Ce que j'essaye d'accomplir est de faire pivoter la matrice de modèle/vue de toutes les manières, et jeter l'objet la manière dont je fais face. J'ai besoin de l'objet pour finalement accélérer vers le sol. Je n'ai aucun problème pour calculer cette trajectoire, si je connais le vecteur exact auquel je suis confronté (la caméra est).

Merci pour toute aide.

Répondre

2

Les trois premières colonnes de la matrice de visualisation de modèle sont les bases du système de coordonnées de vue. Tout ce dont vous avez besoin, c'est la 3e colonne (ou la rangée, selon que vous allez de la caméra au monde ou du monde à la caméra).

+0

Merci pour votre réponse. Cependant, je ne suis pas capable de le faire fonctionner comme vous le décrivez. Si je fais tourner la matrice (après glLoadIndenity) seulement autour de l'axe X, cela fonctionne bien. Mais si je tourne autour de Z et ensuite autour de X (dans GL dans l'ordre inverse), le vecteur pointe toujours de la même façon que sans rotation Z. C'est compréhensible, car tourner autour de l'axe Z comme je le vois ne change pas la troisième colonne de la matrice. – sidon

+0

Es-tu en train d'extraire la colonne? OpenGL ordonne les matrices dans l'ordre majeur de la colonne. Essayez donc d'échanger des "lignes" et des "colonnes" dans votre code. – datenwolf

+0

Oui, j'extraire une colonne. C'est à dire. M [8], M [9], M [10], où M est une matrice 4x4 (float [16]) fournie par OpenGL. – sidon

Questions connexes