2011-01-31 7 views
0

Je me demandais si quelqu'un pouvait me montrer les étapes de développement d'une matrice de transformation 4x4 pouvant être utilisée comme transformation de visualisation.Matrice de transformation de caméra/visualisation

L'appareil est à (1, 2, 2)^T La caméra est pointée sur la direction (0, 1, 0)^T Le haut-vecteur, qui sera mis en correspondance avec la direction y positive sur l'image, est la direction (0; 0; 1)^T.

J'ai parcouru mes notes et je ne comprends pas comment résoudre ces types de problèmes car je sais qu'ils sont assez courants en infographie.

Répondre

1

Vous pouvez utiliser les formules here, en remplissant simplement les matrices et en multipliant chaque matrice les unes après les autres jusqu'à ce que vous ayez construit votre matrice de transformation. (Les matrices de rotation peuvent être incorrectes, vérifiez donc les formules here.)

Quels types de problèmes essayez-vous de résoudre? Vous n'avez pas vraiment posé une question étroite.

La position de la caméra serait réglée avec une matrice de traduction:

[1 0 0 X] 
[0 1 0 Y] 
[0 0 1 Z] 
[0 0 0 1] 

remplaçant [1,2,2]^T pour [X, Y, Z]^T

vous donnera une matrice de traduction:

[1 0 0 1] 
[0 1 0 2] 
[0 0 1 2] 
[0 0 0 1] 

Cela peut être multipliée par un vecteur d'entrée

[x y z 1]^T 

pour transformer ce point, comme suit:

[1 0 0 1] [x] = x+1 
[0 1 0 2] [y] = y+2 
[0 0 1 2] [z] = z+2 
[0 0 0 1] [1] = 1 

Pour vecteur d'entrée [4,5,6,1] ce céderais [5,7,8,1]. Voyez, cela déplace ou traduit simplement le point d'entrée x, y, z par les X, Y, Z que nous avons branchés ci-dessus (en ignorant le dernier composant pour le moment).

Rappelez-vous qu'une matrice M multipliée par un vecteur v vous donne un vecteur, appelez p

p = M v 

penser à cela comme appeler une fonction, un peu comme p = sin (x), mais au lieu p = M (v) où M est une fonction de transformation, elle se présente sous la forme d'une matrice puisque les transformations qui nous intéressent peuvent être représentées strictement par des opérateurs linéaires, une manière de dire une multiplication matricielle, qui est juste une manière sophistiquée disant la somme de 4 multiplications scalaires. Pour enchaîner ces transformations matricielles comme s'il s'agissait d'appels de fonction, il suffit de les multiplier les unes après les autres. (Notez qu'il s'agit d'une simplification car nous devons faire des divisions pour effectuer des transformations de perspective, c'est pourquoi nous trichons et faisons des tricks avec une matrice 4x4 au lieu d'une simple 3x3 - c'est ce que le terme bizarre "homogeneneous" signifie.)

Est-ce que votre classe a un manuel ou des notes de cours (si elle est en ligne, pouvez-vous y faire un lien)? J'imagine que les matériaux couvriraient les autres transformations et éventuellement fournir des exemples. Vous pouvez l'essayer, multiplier un vecteur v = [-9 -8 -7] par la matrice 4x4 ci-dessus et voir quel vecteur [x y z w] vous en retirez. Ensuite, essayez de brancher d'autres valeurs pour les matrices de rotation.

Vous pouvez exécuter des bits complexes où vous devez multiplier la matrice de rotation par la matrice de traduction dans le bon ordre: R T serait une matrice différente de TR si la matrice de traduction est différente de 0,0,0.

+0

La question me demandait de développer une matrice 4 x 4 qui peut être utilisée comme la transformation de visualisation avec ces paramètres, et de montrer mon travail. – Joey

+0

J'ai trouvé une formule dans mes notes où Mw2v = TR où Mw2v est la visualisation de la matrice monde de la transformation à voir, T est la traduction, R est la rotation. – Joey

+0

Eh bien, je vous ai montré comment construire la matrice T. Vous avez juste besoin de comprendre la matrice R et de la multiplier à droite par la matrice T pour obtenir votre réponse, Mw2v. Si la matrice R est la matrice d'identité (tous les zéros avec ceux le long de la diagonale), alors Mw2v = T. Je peux vous dire que les seuls angles auxquels vous devez faire face (si je comprends bien le problème) sont probablement +/- 90 degrés, il vous suffit de déterminer les axes sur lesquels ils pivotent et de les insérer dans les bonnes équations matricielles (étiquetées glRotate) sur la page à laquelle je me suis connecté. Il est facile d'avoir une mauvaise indication, alors faites attention. Si vous le pouvez, vérifiez-le dans OpenGL ??? –

Questions connexes