2009-02-01 5 views
1

Ok, donc - ceci est fortement lié à ma précédente question Transforming an object between two coordinate spaces, mais beaucoup plus direct et il devrait avoir une réponse évidente.Garder la trace d'un espace de coordonnées local d'objets

Un espace de coordonnées local d'objets, comment puis-je "l'obtenir"? Dire que je charge un Orc dans mon jeu, comment puis-je savoir par programme où c'est la tête, le bras gauche, le bras droit et l'origine (nombril?) Est? Et quand je sais où il est, je dois le sauvegarder manuellement ou est-ce quelque chose qui existe magiquement dans l'API DirectX? Dans mon autre question, une personne a dit quelque chose sur le stockage d'un sommet pour les directions X, Y, Z et l'origine. Comment puis-je trouver ces sommets? Est-ce que je les choisis arbitrairement, les assigner dans le modèle avant de les charger dans mon jeu? etc.

Ce n'est pas de transformer entre coordonnées espaces

Répondre

4

En fait, il est sur le point entre transformatrice de coordonnées espaces. Ok, vous comprenez que vous pouvez avoir une matrice qui fait la traduction ou la rotation. (Ou mise à l'échelle, ou inclinaison, etc.) Que vous pouvez multiplier une telle matrice par un point (V) pour obtenir le nouveau point (translation/rotation/etc). .:

par exemple
Mtranlate = [ 1 0 0 Tx ] * V = [ Vx ] = [ Vx + Tx ] 
      [ 0 1 0 Ty ]   [ Vy ]  [ Vy + Ty ] 
      [ 0 0 1 Tz ]   [ Vz ]  [ Vz + Tz ] 
      [ 0 0 0 1 ]   [ 1 ]  [ 1  ] 

Ou rotation autour de l'X/Y/Z: axe

Mrotate_x = [ 1 0  0 0 ] * V = [ Vx ] = [ Vx    ] 
      [ 0 cos -sin 0 ]   [ Vy ]  [ Vy*cos - Vz*sin ] 
      [ 0 sin cos 0 ]   [ Vz ]  [ Vy*sin + Vz*cos ] 
      [ 0 0  0 1 ]   [ 1 ]  [ 1    ] 

que vous pouvez combiner plusieurs opérations en multipliant les matrices ensemble.
Par exemple: Mnew = Mtranslate * Mrotate_x.
(Et oui, l'ordre importe!)

donc donné une origine de base dans le monde réel, vous pouvez traduire l'emplacement xy de votre orc (connu/fourni), déduire du terrain à ce moment que les pieds de votre orc de son z emplacement est et traduire à cela. Maintenant vous avez les "pieds" de votre orc en coordonnées globales. De là, vous pourriez vouloir faire pivoter votre orc de sorte qu'il fait face à une direction particulière.

Puis traduisez vers le haut (basé sur le modèle de votre orc) pour trouver son cou. A partir du cou, nous pouvons traduire vers le haut (et peut-être tourner) pour trouver sa tête ou plus pour trouver son épaule. De l'épaule, nous pouvons faire une rotation et traduire pour trouver le coude. Du coude, nous pouvons tourner et traduire pour trouver la main.

Chaque composant de votre modèle orc a un cadre de référence local. Chacun est lié au référentiel auquel il est rattaché par une ou plusieurs transformations (matrices). En multipliant à travers toutes les matrices locales (transformées), nous pouvons finalement voir comment passer des pieds de l'orc à sa main.

(Rappelez-vous, j'animez l'orc et juste utiliser ses pieds x, y, emplacement z. Sinon, il est trop de travail.)

Vous voyez beaucoup de ce genre de chose en robotique qui peut fournir une belle introduction élémentaire à la cinématique vers l'avant. En robotique, au moins avec les robots les plus simples, vous avez un moteur qui tourne, et une longueur de membre à traduire. Et puis il y a un autre moteur. (En revanche, l'homme épaule articulation peut tourner autour de trois axes à la fois.)

Vous pourriez look over the course HANDOUTS for CMU's Robotic Manipulation class (15-384).

Peut-être quelque chose comme leur Forward Kinematics Intro.

Questions connexes