OpenGL中的矩陣相乘的順序 (轉)

原文地址:http://blog.csdn.net/dizuo/article/details/2325279

1,在OpenGL中所有的視圖變換,模型變換 都是4×4矩陣,每個後續的glMultiMatrix*(N),或者變換函數,glTranslate*(),glRotate*(),等都是把一個新的4×4矩陣與當前的矩陣M相乘,不同的是:變換函數glTranslate*(),glRotate*()等會根據函數參數構造一個4×4矩陣,也設爲N,兩種情況產生相同的結果:M×N。注意這裏的順序,後續的矩陣是右乘當前矩陣。

2,因爲在opengl中座標表示形式是:[x,y,z]T(表示轉置),或者齊次座標下:[x,y,z,w]T標準化後[x/w,y/w,z/w,1.0]T 這就決定了矩陣也是列優先表示的。將上面的兩個矩陣作用於點V,則表示爲:M×N×V;滿足矩陣相乘的條件:[4×4 ] * [4×1].
舉個例子:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(M);           //glScale*();
glMultMatrixf(N);           //glRotate*()
glMultMatrixf(L);           //glTranslate*();
glBegin(GL_POINTS);
glVertex3f(V);
glEnd();
按照上面的語句,經過變換的頂點是:M×N×L×V, 始終是右乘.
注意下面的例子:
glMatrixMode(L_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, 1.0, 1.0, 20.);   //創建投影矩陣Mp;
glMultMatrixf(Ms);
產生的結果是:Mp×Ms×V(頂點);
但是如果你想要結果是:Ms×Mp×V(頂點);代碼是:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMultMatrixf(Ms);
gluPerspective(45.0, 1.0, 1.0, 20.);   //創建投影矩陣Mp;
理解了矩陣相乘順序,再做各種變換,實現各種效果的時候就會得心應手。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章