考虑以下代码:

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完全按照您的要求进行操作。

09-06 19:59