使用 glm 将 vec3 与 mat4 相乘

Ite*_*tor 3 c++ glm-math

目前,我将 转换vec3vec4,将其与矩阵相乘,然后将其转换回vec3

代码:

glm::vec3 transformed = glm::vec3(matrix * glm::vec4(point, 0.0))
Run Code Online (Sandbox Code Playgroud)

它有效,但我认为这不是计算它的好方法。是否可以将 a 应用于mat4a vec3,而不将其来回vec4转换?

wic*_*ich 5

使用 OpenGL 时,坚持使用齐次坐标是非常明智的。对于 3D 空间,这些是 4D 向量,通常第四个元素等于 1。当您执行此操作时,所有计算都在 4 维空间中,因此任何地方都不需要转换。

另请注意,在您的示例中,您实际上将丢失可能已记录在转换矩阵中的任何翻译。如果你想保留这个,你需要对第四个元素使用 1,而不是 0。

红皮书的附录 F描述了在 OpenGL 中如何以及为何使用齐次坐标。