OpenGL:mat4x4 乘以 vec4 产生 tvec<float>
OpenGL: mat4x4 multiplied with vec4 yields tvec<float>
考虑代码:
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。
According to my knowledge of linear algebra this should yield a mat4x4.
那就是问题
根据线性代数,矩阵可以 multipled by a scalar (which does element-wise multiplication) or by another matrix. But even then, a matrix * matrix multiplication 只有当第一个矩阵的行数等于第二个矩阵的列数时才有效。结果矩阵是第一个列数和第二个行数的矩阵。
因此,如果您有一个 AxB 矩阵并将其与 CxD 矩阵相乘,则只有当 B 和 C 相等时才有效。结果是一个 AxD 矩阵。
矩阵乘以向量意味着假设向量是矩阵。因此,如果您有一个 4x4 矩阵并将其与一个 4 元素向量右乘,则只有将该向量视为 4x1 矩阵才有意义(因为您不能将 4x4 矩阵乘以 1x4 矩阵)。一个 4x4 矩阵 * 一个 4x1 矩阵的结果是……一个 4x1 矩阵。
又名:向量。
GLM 完全按照您的要求进行。
考虑代码:
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。
According to my knowledge of linear algebra this should yield a mat4x4.
那就是问题
根据线性代数,矩阵可以 multipled by a scalar (which does element-wise multiplication) or by another matrix. But even then, a matrix * matrix multiplication 只有当第一个矩阵的行数等于第二个矩阵的列数时才有效。结果矩阵是第一个列数和第二个行数的矩阵。
因此,如果您有一个 AxB 矩阵并将其与 CxD 矩阵相乘,则只有当 B 和 C 相等时才有效。结果是一个 AxD 矩阵。
矩阵乘以向量意味着假设向量是矩阵。因此,如果您有一个 4x4 矩阵并将其与一个 4 元素向量右乘,则只有将该向量视为 4x1 矩阵才有意义(因为您不能将 4x4 矩阵乘以 1x4 矩阵)。一个 4x4 矩阵 * 一个 4x1 矩阵的结果是……一个 4x1 矩阵。
又名:向量。
GLM 完全按照您的要求进行。