C++ 将GLM中的矩阵和向量相乘(OpenGL)

C++ 将GLM中的矩阵和向量相乘(OpenGL),c++,glm-math,C++,Glm Math,我有一个变换矩阵,m,还有一个向量,v。我想用矩阵对向量做一个线性变换。我希望我能做这样的事情: glm::mat4 m(1.0); glm::vec4 v(1.0); glm::vec4 result = v * m; 不过,这似乎不起作用。在GLM中执行此类操作的正确方法是什么 编辑: 给遇到类似问题的人一个提示。GLM要求所有操作数使用相同的类型。不要试图将一个dvec4与一个mat4相乘,并期望它能工作,您需要一个vec4因为GLM被设计为模仿GLSL,并且被设计为与OpenGL一起

我有一个变换矩阵,
m
,还有一个向量,
v
。我想用矩阵对向量做一个线性变换。我希望我能做这样的事情:

glm::mat4 m(1.0);
glm::vec4 v(1.0);

glm::vec4 result = v * m;
不过,这似乎不起作用。在GLM中执行此类操作的正确方法是什么

编辑:
给遇到类似问题的人一个提示。GLM要求所有操作数使用相同的类型。不要试图将一个
dvec4
与一个
mat4
相乘,并期望它能工作,您需要一个
vec4

因为GLM被设计为模仿GLSL,并且被设计为与OpenGL一起工作,所以它的矩阵是列主矩阵。如果你有一个列主矩阵,你把它和向量相乘


正如您在GLSL中应该做的那样(除非您在上传时转置了矩阵)。

glm::vec4
表示为列向量。因此,适当的形式是:

glm::vec4 result = m * v;

(注意操作数的顺序)

@Nicol Bolas:为什么要去掉GLM标记?这似乎比OpenGL更相关。@AND:因为他所说的GLM是一个特定的库,而不是“广义线性模型”。但是我也删除了OpenGL标签,我也用这种方式尝试过,没有区别。gcc告诉我,没有匹配*操作符可以接受一个矩阵和一个向量。不过,问题是我试图用一个基于浮点的矩阵和一个基于双基的向量相乘,GLM不喜欢这样。感谢您的帮助。但是
v*m
的预期行为是什么?glm允许3x1乘以3x3…@killer矩阵乘法不是可交换的。glm开发人员选择对矩阵进行定向,以便变换位于*运算符的左侧,而变换所应用的向量位于*运算符的右侧。理论上,他们可以用另一种方式来定义它,尽管线性代数中有这样做的惯例。他们还可以尝试编写代码,根据向量的位置找出它,然后对矩阵进行变形,使其正常工作,但这可能会对性能造成重大影响。@killer更完整的数学描述可在