2012-04-27 2 views
1

Si j'ai une matrice actuelle en OpenGL de C, et je demande le code suivant:multiplication matricielle opengl

glMultMatrixf(M); 
    glMultMatrixf(M2); 

Qu'est-ce que la matrice de transformation actuelle ressemble? Dans le livre rouge, il indique que l'utilisation de glMultMatrix * (M) fait ceci: CM. Mais aussi que faire ce qui précède fait que cela se produise: M (M2v) où M2 est appliqué avant M. Dans ce cas M serait l'opérande de gauche, mais dans l'ancien M est l'opérande de droite.

Répondre

4

Si oui;

glLoadIdentity(); 
glMultMatrixf(M1); 
glMultMatrixf(M2); 
glMultMatrixf(M3); 

Ensuite, la matrice résultante est M = M1 * M2 * M3;

Si vous appliquez un sommet v à cela, il est multiplié comme ceci: v' = M*v = M1*M2*M3*v

Je ne comprends pas vraiment votre confusion bien, ce qui est le « premier cas », vous faites référence?

+0

L'OP affichant la question semble avoir une certaine confusion entre la convention mathématique et le calcul matriciel en informatique. – ksming

+0

Donc je suppose que M3 * v arrive avant que M2 ne soit multiplié. Je ne comprends pas pourquoi le livre rouge indique que MultMatrix * f (M) multiplie la matrice courante C par M (CM) quand dans votre explication chaque fois qu'une multiplication de matrice est appliquée, elle est appliquée comme l'opérande gauche, pas la droite , comme dans (CM) –

+3

@SamAdams: Il est * appliqué * à droite. Il est appliqué à droite de toutes les matrices * précédentes *. La matrice actuelle, construite par toutes les commandes matricielles précédentes, est multipliée avec la matrice donnée, et la matrice donnée est sur la droite. –

Questions connexes