在 GLM (OpenGL) 中将矩阵与向量相乘

发布于 2024-12-07 03:24:00 字数 347 浏览 3 评论 0原文

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

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

glm::vec4 result = v * m;

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

编辑:

只是给遇到类似问题的人一个注释。 GLM 要求所有操作数使用相同的类型。不要尝试将 dvec4mat4 相乘并期望它能够工作,您需要一个 vec4

I have a transformation matrix, m, and a vector, v. I want to do a linear transformation on the vector using the matrix. I'd expect that I would be able to do something like this:

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

glm::vec4 result = v * m;

This doesn't seem to work, though. What is the correct way to do this kind of operation in GLM?

Edit:

Just a note to anyone who runs into a similar problem. GLM requires all operands to use the same type. Don't try multiplying a dvec4 with a mat4 and expect it to work, you need a vec4.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

贱贱哒 2024-12-14 03:24:00

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

glm::vec4 result = m * v;

注意操作数的顺序)

glm::vec4 is represented as a column vector. Therefore, the proper form is:

glm::vec4 result = m * v;

(note the order of the operands)

回首观望 2024-12-14 03:24:00

由于 GLM 旨在模仿 GLSL 并设计用于与 OpenGL 配合使用,因此其矩阵是列主矩阵。如果你有一个列主矩阵,你可以将它与向量左乘。

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

Since GLM is designed to mimic GLSL and is designed to work with OpenGL, its matrices are column-major. And if you have a column-major matrix, you left-multiply it with the vector.

Just as you should be doing in GLSL (unless you transposed the matrix on upload).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文