我拿了一个示例代码来测试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
可能的原因是什么,我该怎么办?
(我应该在这个代码之外搜索缺陷吗?)
答案 0 :(得分:6)
-4.29497e+08
这看起来像未经初始化的记忆,这会让我相信这个缺陷在于:
glm::mat4 trans;
您尚未初始化矩阵,但已对其执行了算术运算。你不能假设构造函数会初始化它的内存,所以改为:
glm::mat4 trans(1.0f);
这应该可以解决问题。
这个可能没有出现在所有开发环境中,例如,VS中的调试模式有一些防止这种情况的安全措施,但它会以发布模式显示。
简单地说:实践RAII:资源获取是初始化。至少,将内存归零,就像重新分配内存时一样,它将被设置为上一次释放它之前的值。
答案 1 :(得分:0)
初始化您的翻译矩阵
glm::mat4 trans(1);