23

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

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

glm::vec4 result = v * m;

不过,这似乎不起作用。在 GLM 中进行这种操作的正确方法是什么?

编辑:

只是给遇到类似问题的任何人的说明。GLM 要求所有操作数使用相同的类型。不要尝试将 advec4与 a相乘mat4并期望它起作用,您需要 a vec4

4

2 回答 2

33

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

glm::vec4 result = m * v;

(注意操作数的顺序)

于 2011-09-27T19:17:19.350 回答
11

由于 GLM 旨在模仿 GLSL 并且旨在与 OpenGL 一起使用,因此它的矩阵是列优先的。如果你有一个以列为主的矩阵,你将它与向量左乘。

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

于 2011-09-27T19:14:17.527 回答