我正在使用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。我非常感谢您的时间!
答案 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);
这解决了这个问题!