2010-12-09 18 views
0

Je joue avec certains modèles pour le jeu glest.calculer la matrice qui transforme un ensemble de coordonnées en un autre

Ces modèles sont constitués d'une ou plusieurs mailles; chaque maillage est constitué de plusieurs cadres qui décrivent la position de chaque sommet pour chaque image d'animation. Dans le modèle présenté ci-dessous, la position de chaque sommet dans chaque roue de chaque trame est dans un tableau.

Ces modèles ont été exportés depuis des outils 3D tels que Blender. Quelqu'un a quelque part les originaux.

Mais je me demande, pour l'animation simple comme une roue qui tourne, comment pouvez-vous calculer les transformations - les étapes de rotation, échelle et traduire, ou la matrice que lorsqu'elle est appliquée à l'image précédente entraînera dans le nouveau cadre?

(évidemment pas tous les cadres auront ces transformations, car ils peuvent déformer les modèles et autres.)

En outre, comment pouvez-vous détecter la mise en miroir et d'autres possibilités de réduire la quantité de données de sommet en appliquant une matrice et rendre les mêmes sommets à nouveau?

La vitesse de déplacement - si elle est mesurée en quelques minutes - ne sera pas un problème.

A glest catapult

+0

Je ne suis pas sûr de comprendre la question ... étant donné un ensemble d'images dans lequel un modèle de roue tourne, comment calculez-vous la matrice de rotation qui transforme une image à l'image suivante? Est-ce qu'on nous donne l'axe de rotation de la roue ou est-ce que nous devons comprendre cela? – LarsH

+0

@LarsH oui vous comprenez le problème, et non vous n'avez pas d'autre entrée que les tableaux de sommets – Will

Répondre

1

Tout d'abord, certaines hypothèses:

  • Vous avez affaire à des transformations 3D affines (transformation linéaire, plus la traduction).
  • Vous avez les sommets pour chaque trame dans votre animation
  • Vous pouvez associer au moins 4 sommets dans un cadre avec 4 sommets dans la trame suivante

Ensuite, vous pouvez prendre 4 sommets en tant que vecteurs 4D Collumn (en ajoutant un 1 dans le 4ème élément de chaque vecteur) dans l'espace original et les concaténer pour créer une matrice 4x4, appelée X. Faites de même pour leurs vecteurs correspondants dans l'espace transformé et appelez-les Y, qui sera également une matrice 4x4. Un peu d'algèbre linéaire vous fournit une méthode pour trouver la matrice 4x4 A qui lorsqu'elle est appliquée à X vous donne Y. Ainsi:

AX = Y 
A = YX-1

L'utilisation de ce pour obtenir des rotations et mise à l'échelle n'est pas trivial. Cependant, la colonne la plus à droite de A contiendra la traduction de l'objet entre les images successives.