"glm::translate" 输出值不正确的矩阵

"glm::translate" outputs a matrix with incorrect values

我拿了一个示例代码来测试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

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

(我是不是应该在这段段代码之外寻找漏洞?)

-4.29497e+08

这看起来像是未初始化的内存,这让我相信缺陷在于:

glm::mat4 trans;

您还没有初始化矩阵,但对其进行了算术运算。您不能假设构造函数将初始化它的内存,因此更改为:

glm::mat4 trans(1.0f);

这应该可以解决问题。

可能不会出现在所有开发环境中,例如,VS 中的调试模式有一些保护措施来防止这种情况,但它会出现在发布模式中。

简单的说:练习RAII:Resource Acquisition Is Initialization。至少,将内存归零,因为当重新分配内存时,它将被设置为上次释放时的先前值。

初始化你的翻译矩阵

glm::mat4 trans(1);