在 GLM (OpenGL) 中将矩阵与向量相乘
我有一个变换矩阵,m
,和一个向量,v
。我想使用矩阵对向量进行线性变换。我希望我能够做这样的事情:
glm::mat4 m(1.0);
glm::vec4 v(1.0);
glm::vec4 result = v * m;
但这似乎不起作用。在GLM中进行这种操作的正确方法是什么?
编辑:
只是给遇到类似问题的人一个注释。 GLM 要求所有操作数使用相同的类型。不要尝试将 dvec4
与 mat4
相乘并期望它能够工作,您需要一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
glm::vec4
表示为列向量。因此,正确的形式是:(注意操作数的顺序)
glm::vec4
is represented as a column vector. Therefore, the proper form is:(note the order of the operands)
由于 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).