GLM矩阵乘法是左还是右

时间:2017-12-13 14:34:47

标签: c++ matrix-multiplication glm-math

我对GLM中的矩阵乘法有一些困惑,使用C ++。

是的,我知道

然而,输出令人困惑。为了清楚起见,我发布了代码。

//Initialize two empty 2dim vectors, and two empty 2x2 glm matrices
mat2 testMat (0.0f);
mat2 idMat(0.0f);
vec2 testVec (0.0f);
vec2 resultVec (0.0f);


//testVec: ( 1)
//         (-1)
testVec[0] = 1.0f;
testVec[1] = -1.0f;

// idMat: (1  0)
//        (0 -1)
idMat[0][0] = 1.0f;
idMat[1][1] = -1.0f;

// testMat: (2  3)
//          (4  5)
int blabla = 2;
for (int row = 0; row < testMat[0].length(); row++){
    for (int col = 0; col < testMat[0].length(); col++){
        testMat[row][col] = blabla;
        blabla += 1;
    }
}

//                     REAL RESULT   EXPECTED RESULT
// (2  3)      ( 1)       (-2)             (-1)
// (4  5)  *   (-1)   =   (-2)             (-1)
resultVec = testMat * testVec;


//                        REAL RESULT   EXPECTED RESULT
// (2  3)      (1   0)       ( 2  3)        (2  -3)
// (4  5)  *   (0  -1)   =   (-4 -5)        (4  -5)
mat2 resultMat = testMat * idMat;


//                        REAL RESULT   EXPECTED RESULT
// (2  3)      (1   0)       (2  -3)        ( 2   3)
// (4  5)  *   (0  -1)   =   (4  -5)        (-4  -5)
mat2 result2Mat = idMat * testMat;

我检查了定义(*)运算符的库代码(对于mat2 * mat2),似乎OpenGL正在执行 left-multiplication ,即A乘法B产生的结果( B * A)。

而(*)运算符(对于mat2 * vec2)将矩阵的列与向量元素相乘,而不是将矩阵的行与向量元素相乘。

问题:

  1. (*)运算符是否以这种方式运行,因为OpenGL矩阵是列主要的?

1 个答案:

答案 0 :(得分:2)

以下是错误的:

testMat[row][col] = blabla;

矩阵上的glm&quot; []运算符返回一列而不是一行。数学很好,但你是以换位方式初始化矩阵。