考虑以下代码:
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)
产生 vector ?根据我对线性代数的了解,这应该产生mat4x4。 最佳答案
那就是问题所在。
根据线性代数,一个矩阵可以是multipled by a scalar(进行逐元素乘法),也可以是另一个矩阵。但是即使如此,matrix * matrix multiplication仅在第一个矩阵中的行数等于第二个矩阵中的列数时才有效。所得到的矩阵是第一个具有列数,第二个具有行数的矩阵。
因此,如果您有一个AxB矩阵并将其与CxD矩阵相乘,则这仅在B和C相等时才有效。结果是一个AxD矩阵。
将矩阵乘以 vector 手段以假装该 vector 为矩阵。因此,如果您有一个4x4矩阵,并将其与4元素 vector 右乘,则只有将该 vector 视为4x1矩阵时才有意义(因为您不能将4x4矩阵乘以1x4矩阵)。 4x4矩阵* 4x1矩阵的结果就是... 4x1矩阵。
又名: vector 。
GLM完全按照您的要求进行操作。