glm 在简单翻译中返回 nan

glm returning nan on simple translate

我正在使用 glfw、glad 和 glm 修补 OpenGL。在我使用的其中一个教程中,他们演示了 glm 的一些简单用法:

glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans;
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
vec = trans * vec;
std::cout << vec.x << vec.y << vec.z << std::endl;

当我编译并 运行 这段代码时,我得到了垃圾值(通常是 NAN)。教程特别指出实例化

glm::mat4 trans;

默认情况下会为变量 "trans" 创建单位矩阵。我在想也许这就是问题所在,尽管我已经证实 glm 默认情况下确实这样做了。

如果有帮助,您可以在第 308 行找到整个源文件 here。非常感谢您抽出时间!

回答我自己的问题:虽然教程和其他来源说 glm 会自动实例化一个身份向量

glm::mat4 trans;

它没有。查看不同的教程,似乎您可以使用

明确地这样做
glm::mat4 trans = glm::mat4(1.0f);

这解决了问题!

您必须初始化矩阵变量glm::mat4 trans

glm API documentation refers to The OpenGL Shading Language specification 4.20

5.4.2 Vector and Matrix Constructors

If there is a single scalar parameter to a vector constructor, it is used to initialize all components of the constructed vector to that scalar’s value. If there is a single scalar parameter to a matrix constructor, it is used to initialize all the components on the matrix’s diagonal, with the remaining components initialized to 0.0.

这意味着,可以通过单个参数 1.0 初始化单位矩阵:glm::mat4(1.0f)

像这样更改您的代码:

glm::mat4 trans(1.0f);


另见 OpenGL Mathematics (GLM); 2. Vector and Matrix Constructors