" GLM ::翻译"输出具有不正确值的矩阵

时间:2017-11-08 11:12:12

标签: c++ opengl visual-studio-2017 glm-math

我拿了一个示例代码来测试glm :: translate函数:

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;

输出以下内容:

-4.29497e+08, -4.29497e+08, -4.29497e+08

而不是预期的2, 1, 0

可能的原因是什么,我该怎么办?

(我应该在这个代码之外搜索缺陷吗?)

2 个答案:

答案 0 :(得分:6)

-4.29497e+08

这看起来像未经初始化的记忆,这会让我相信这个缺陷在于:

glm::mat4 trans;

您尚未初始化矩阵,但已对其执行了算术运算。你不能假设构造函数会初始化它的内存,所以改为:

glm::mat4 trans(1.0f);

这应该可以解决问题。

这个可能没有出现在所有开发环境中,例如,VS中的调试模式有一些防止这种情况的安全措施,但它会以发布模式显示。

简单地说:实践RAII:资源获取是初始化。至少,将内存归零,就像重新分配内存时一样,它将被设置为上一次释放它之前的值。

答案 1 :(得分:0)

初始化您的翻译矩阵

glm::mat4 trans(1);