2009-02-25 8 views
3

si je fais positionVector*worldMatrix la position est transformée en espace monde. Mais que se passe-t-il si je le fais dans l'autre sens (worldMatrix*positionVector) en termes d'espace 3D? J'ai remarqué que le résultat est différent du premier. J'ai déjà googlé sur la matrice, les maths ils m'expliquent beaucoup mais pas celui-là, au moins je ne pouvais pas le trouver.Que signifie matrice * vector contrairement à vector * matrice

Répondre

10

Comme d'autres l'ont indiqué - permuter l'ordre de la multiplication équivaut à multiplier par la transposition. Comme il arrive, les matrices de rotation sont un type spécial de matrices connu sous le nom orthogonal matrices cela vous donne un certain nombre de propriétés soignées.

Le plus intéressant est probablement que la transposition de la matrice est son inverse. Pour votre monde, la multiplication par l'inverse équivaut à prendre une position dans l'espace du monde et à l'amener dans les coordonnées locales de l'objet auquel la transformation est associée.A titre d'exemple, considérons une boîte orientée arbitrairement dans le monde - en multipliant par la transformation du monde inverse pourrait (entièrement dépend de l'application bien sûr :)) vous mettre dans un espace où il est aligné sur l'axe, et si vous étiez intéressé par la recherche de collisions avec d'autres objets en faisant les calculs dans l'espace local de la boîte rendrait cela plus facile.

+0

Vous dites que l'inverse (mat) est la même que la transposition (mat)? Je ne trouve aucune preuve de cela car cela contredit mes connaissances scolaires. – codymanix

+2

En général, la transposition n'est pas la même que l'inverse. C'est une propriété spécifique des matrices orthogonales (vérifiez le lien dans ma réponse pour plus de détails) que toutes les matrices de rotation et de réflexion sont. –

8

Dans le vecteur de la matrice, votre vecteur sera interprété comme un vecteur de colonne. Dans le vecteur, il sera interprété comme un vecteur ligne. 2x2 exemples:

/ a b \ /e \ /ae+bf \ 
|  | * | | = |  | 
\ c d/ \ f/ \ ce+df/

     /a b \ 
(e f) * |  | = (ea+fc eb+fd) 
      \ c d/

Comme vous pouvez le voir, le résultat est différent. Par ailleurs, faire l'un est le même que faire l'autre après avoir transposé la matrice.

En termes d'espace 3D, si vous considérez l'une des deux options comme une transformation linéaire, je ne sais pas s'il y a une interprétation sensée pour l'autre. This Wikipedia section dit des choses à ce sujet, mais c'est au-delà de ma compréhension de l'algèbre linéaire.

2

(matrice * vecteur) est équivalent à (vecteur * transposition (matrice))

1

règles mathématiques Matrix:

matrices Compte tenu A et B, avec des tailles MxN et OxP,

  • Le produit matriciel A * B n'est défini que si N = O.
  • Le résultat sera une matrice de taille MxP.

Une autre règle importante est que la multiplication matricielle n'est pas commutative. A * B! = B *A

En règle générale dans l'infographie, le vecteur de position est une matrice de 4x1, et la matrice de vision du monde est carré, 4x4. Ainsi, vous devriez vous attendre à ce que la matrice de pré-multiplication de la vue du monde avec le vecteur de position ne soit pas définie. La bonne façon d'appliquer la matrice de la vue du monde au vecteur de position est dans l'autre ordre, en pré-multipliant le vecteur de position par la matrice de la vue du monde. (Je parle mathématiquement, ici)

Pour plus de plaisir avec les mathématiques matricielles, consultez ce tutorial.

+0

Merci pour le lien mais en HLSL (un langage shader) il y a une fonction mul (mat, vec) ainsi que mul (vec, mat). Dans l'un vec est interprété comme vecteur de colonne et dans l'autre il est interprété comme vecteur de ligne. – codymanix

+0

Oui, toute bonne bibliothèque graphique/langage devrait avoir une fonction pour le faire pour vous, mais savoir ce qui se passe à l'intérieur de cette fonction est utile. –