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