我对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)将矩阵的列与向量元素相乘,而不是将矩阵的行与向量元素相乘。
问题:
答案 0 :(得分:2)
以下是错误的:
testMat[row][col] = blabla;
[]
运算符返回一列而不是一行。数学很好,但你是以换位方式初始化矩阵。