glm返回nan简单的翻译

时间:2018-03-01 20:42:34

标签: c++ opengl glm-math coordinate-transformation

我正在使用glfw修改OpenGL,很高兴和glm。在我正在使用的其中一个教程中,他们演示了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。我非常感谢您的时间!

2 个答案:

答案 0 :(得分:3)

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

glm API documentation指的是The OpenGL Shading Language specification 4.20

  

5.4.2向量和矩阵构造函数

     

如果向量构造函数中存在单个标量参数,则它用于将构造向量的所有组件初始化为该标量的值。 如果矩阵构造函数有一个标量参数,它将用于初始化矩阵对角线上的所有组件,其余组件初始化为0.0。

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

以某种方式改变你的代码:

glm::mat4 trans(1.0f);


另请参阅OpenGL Mathematics (GLM); 2. Vector and Matrix Constructors

答案 1 :(得分:0)

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

glm::mat4 trans;

没有。看一下不同的教程,似乎你可以用

明确地做到这一点
glm::mat4 trans = glm::mat4(1.0f);

这解决了这个问题!