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