2009-10-15 7 views
5

Je dois obtenir un vecteur haut pour une caméra (pour obtenir le bon look) à partir d'un angle de roulis, de tangage et de lacet (en degrés). J'ai essayé différentes choses pendant quelques heures et n'ai eu aucune chance :(Toute aide ici serait appréciée!Comment obtenir un vecteur de caméra à partir du roulis, du tangage et du lacet?

+0

Depuis que vous l'avez étiqueté avec toutes les principales bibliothèques graphiques, je suppose qu'il est raisonnable de supposer que vous voulez dire comment le faire en général. –

+0

Yep Blaenk c'est correct ... J'avais juste besoin d'aide avec les maths: D – Polaris878

Répondre

5

Rouleau, Pitch et lacet définissent une rotation dans 3 axes. De ces angles, vous pouvez construire un 3x3 matrice de transformation qui exprime cette rotation (see here how)
Après avoir cette matrice, vous prenez votre vecteur régulier, disons (0,1,0) si 'up' est l'axe Y et multipliez-le avec la matrice. obtenir le vecteur

Modifier transformé en -.
application de la transformation de (0,1,0) est la même chose que la prise de la rangée centrale 3 les lignes de la matrice mak. e up une base orthogonale du système en rotation. Rappelez-vous qu'une API graphique 3D utilise des matrices 4x4. Donc, pour faire une matrice 4x4 de la matrice de rotation 3x3 vous devez ajouter un « 1 » à M [3] [3] (le coin) et des zéros au reste comme ceci:

r r r 0 
r r r 0 
r r r 0 
0 0 0 1 
+0

Shoosh, et si je n'appliquais pas la transformation au (0,1,0)? Est-ce que je peux simplement sortir une des lignes/colonnes de la matrice de rotation comme mon ascendant? Merci – Polaris878

+0

Oui, au lieu de faire la transformation vector-matrice, vous pouvez simplifier l'équation en omettant les zéro-sommes/termes. De plus, les vecteurs peuvent être major en colonne ou en rang majeur. Assurez-vous d'extraire l'axe correctement. –

1

Cela ne peut pas répondez directement à votre question, même si cela peut encore aider. J'ai un projet gratuit open-source pour XNA qui crée un terminal de débogage qui recouvre votre jeu pendant qu'il est en cours d'exécution. Vous pouvez l'utiliser pour rechercher des valeurs, appeler des méthodes, etc. Donc, si vous avez une matrice de transformation et que vous voulez en extraire plusieurs parties pendant que le jeu tourne, vous pouvez le faire. Le projet peut être trouvé ici: http://www.protohacks.net/xna_debug_terminal

Je n'ai pas beaucoup d'expertise dans le genre de maths que vous utilisez, mais j'espère que le post de Shoosh aide à cela. Peut-être que le terminal de débogage peut vous aider lorsque vous essayez son idée ou dans d'autres problèmes futurs que vous rencontrez.

+0

hah j'ai hâte de jouer avec ça plus tard. Ca ressemble à un outil que je voulais depuis un moment ... j'aurais dû écrire une console dans mes projets et sortir des données là ... très très maladroit. –

Questions connexes