openGL中矩陣相乘的順序

2021-07-14 10:43:20 字數 1204 閱讀 4773

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;

理解了矩陣相乘順序,再做各種變換,實現各種效果的時候就會得心應手。

矩陣的相乘

三種方法 1,torch.mm 僅僅適用2維的矩陣相乘 2,torch.matmul 3,a torch.randn 3,3 b torch.rand 3,3 a tensor 0.6505,0.0167,2.2106 0.8962,0.3319,1.2871 0.0106,0.8484,0.617...

OpenGL中的矩陣儲存方式

在opengl中,矩陣是以列優先的方式 column major order 儲存的,而一般的數學書上是以行優先的方式 row major order 儲存的。列優先 m0 m4 m8 m12 m1 m5 m9 m13 m2 m6 m10 m14 m3 m7 m11m15 行優先 m0 m1 m2 ...

tensorflow中向量與矩陣相乘

tensorflow學習的小白一枚。今天看到tensorflow中矩陣的乘法,看到有帖子說tensorflow中向量不能與矩陣直接相乘,不然會出錯。我就覺得很奇怪,tensorflow這麼流行的庫怎麼會出現這種弱智的問題呢?然後看了幾個帖子,怎麼解決這個問題的,看了半天,覺得太複雜了,並且他們寫錯了...