ass*_*uid 4 c++ opengl matrix coordinate-transformation glm-math
我正在使用 glfw、glad 和 glm 修补 OpenGL。在我正在使用的教程之一中,他们演示了 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;
Run Code Online (Sandbox Code Playgroud)
当我编译并运行这段代码时,我得到垃圾值(通常是 NAN)。该教程特别指出,实例化
glm::mat4 trans;
Run Code Online (Sandbox Code Playgroud)
默认情况下会为变量“trans”创建一个单位矩阵。我想也许这就是问题所在,尽管我已经验证 glm 默认情况下确实会这样做。
如果它有帮助,您可以在第 308 行找到整个源文件。非常感谢您的宝贵时间!
您必须初始化矩阵变量glm::mat4 trans。
glm API 文档参考OpenGL 着色语言规范 4.20。
\n\n\n\n\n5.4.2 向量和矩阵构造函数
\n\n如果向量构造函数有一个标量参数,则它用于将构造向量的所有组件初始化为该标量\xe2\x80\x99s 值。如果矩阵构造函数有一个标量参数,则它用于初始化矩阵\xe2\x80\x99s 对角线上的所有分量,其余分量初始化为 0.0。
\n
这意味着单位矩阵可以通过单个参数 1.0: 来初始化glm::mat4(1.0f)。
像这样改变你的代码:
\n\nglm::mat4 trans(1.0f);\nRun Code Online (Sandbox Code Playgroud)\n\n
\n另请参阅OpenGL 数学 (GLM);2.向量和矩阵构造函数