OpenGL:mat4x4乘以vec4得出tvec <float>

时间:2018-12-12 15:47:38

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

考虑代码:

glm::mat4x4 T = glm::mat4x4(1);
glm::vec4 vrpExpanded;
vrpExpanded.x = this->vrp.x;
vrpExpanded.y = this->vrp.y;
vrpExpanded.z = this->vrp.z;
vrpExpanded.w = 1;

this->vieworientationmatrix =  T * (-vrpExpanded);

为什么T*(-vrpExpanded)产生向量?根据我对线性代数的了解,这应该产生mat4x4。

1 个答案:

答案 0 :(得分:6)

  

根据我对线性代数的了解,这应该得出mat4x4。

那就是问题。

根据线性代数,矩阵可以是multipled by a scalar(进行逐元素乘法),也可以是另一个矩阵。但是即使这样,matrix * matrix multiplication也只能在第一个矩阵中的行数等于第二个矩阵中的列数时起作用。最终得到的矩阵是第一个矩阵,其列数位于第一列,行数位于第二列。

因此,如果您有AxB矩阵并将其与CxD矩阵相乘,则仅在B和C相等时才有效。结果是一个AxD矩阵。

将矩阵乘以向量意味着将向量假设为矩阵。因此,如果您有一个4x4矩阵并将其与4元素向量右乘,则只有将该向量视为4x1矩阵时才有意义(因为您不能将4x4矩阵乘以1x4矩阵)。而4x4矩阵* 4x1矩阵的结果就是... 4x1矩阵。

又名:向量

GLM完全按照您的要求进行操作。