c++;向量乘矩阵 我试图用C++ GLM乘以4×3矩阵与3维的列向量。

c++;向量乘矩阵 我试图用C++ GLM乘以4×3矩阵与3维的列向量。,c++,matrix,vector,glm-math,multiplication,C++,Matrix,Vector,Glm Math,Multiplication,这就是它的样子: glm::vec3 v3 = ...; glm::mat4x3 mat = ...; glm::vec4 result = mat * v3; VS2012在“*”处显示以下错误: IntelliSense:没有与这些操作数匹配的运算符“*” 操作数类型为:glm::mat4x3*glm::vec3 编译过程中出现另一个错误: 错误C2679:二进制“*”:未找到接受 类型为“glm::vec3”的右侧操作数(或没有可接受的 转换) 那么,正确的乘法方法是什么呢 我的答覆是:

这就是它的样子:

glm::vec3 v3 = ...;
glm::mat4x3 mat = ...;
glm::vec4 result = mat * v3;
VS2012在“*”处显示以下错误:

IntelliSense:没有与这些操作数匹配的运算符“*”

操作数类型为:glm::mat4x3*glm::vec3

编译过程中出现另一个错误:

错误C2679:二进制“*”:未找到接受 类型为“glm::vec3”的右侧操作数(或没有可接受的 转换)

那么,正确的乘法方法是什么呢

我的答覆是:
好的,经过更多的实验,我已经知道哪里出了问题。基本上,关键是glm定义矩阵的方式不同于我们传统的方式
glm::mat4x3 mat
将实际创建一个3行4列的3乘4矩阵。如果您通过
mat[i]
访问,它将返回第i列而不是第i行。

这是智能感知错误,而不是编译错误。你有编译错误吗?Intelliisense只是一个工具,它不是真正的编译器。是的,似乎也有编译错误。我刚刚编辑了我的问题。根据错误,a
glm::vec3
不能用作重载的
*
的右侧操作数。尝试
glm::vec4
而不是
glm::vec3
。谢谢。右边有'glm::vec4'似乎没什么问题,但是返回类型变成了'glm::vec3',这是不需要的。这是否意味着我必须将“glm::mat4x3”扩展为“glm::mat4”?