glm返回nan进行简单翻译 [英] glm returning nan on simple translate
问题描述
我正在使用glfw,glad和glm修改OpenGL.在我正在使用的教程之一中,他们演示了glm的一些简单用法:
I'm tinkering with OpenGL using glfw, glad, and glm. In one of the tutorials I'm using, they demonstrate some simple usage of glm as so:
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;
当我编译并运行此代码时,我得到了垃圾值(通常为NAN).该教程特别指出了实例化
When I compile and run this code, I get trash values (usually NAN). The tutorial specifically noted that instantiating
glm::mat4 trans;
默认情况下将为变量"trans"创建一个单位矩阵.我想这可能是问题所在,尽管我已经验证了glm会默认执行此操作.
would by default create an identity matrix for the varialbe "trans". I'm thinking that perhaps this is the issue, though I have verified that glm does do this by default.
如果有帮助,您可以找到整个源文件这里,位于第308行.非常感谢您的宝贵时间!
In case it would be helpful, you can find the entire source file here on line 308. I greatly appreciate your time!
推荐答案
您必须初始化矩阵变量glm::mat4 trans
.
You have to initialize the matrix variable glm::mat4 trans
.
glm API文档指的是 OpenGL着色语言规范4.20 .
5.4.2向量和矩阵构造器
如果向量构造函数只有一个标量参数,它将用于将构造的向量的所有分量初始化为该标量的值. 如果矩阵构造函数只有一个标量参数,则它将用于初始化矩阵对角线上的所有分量,并将其余分量初始化为0.0.
If there is a single scalar parameter to a vector constructor, it is used to initialize all components of the constructed vector to that scalar’s value. If there is a single scalar parameter to a matrix constructor, it is used to initialize all the components on the matrix’s diagonal, with the remaining components initialized to 0.0.
这意味着,可以通过单个参数1.0:glm::mat4(1.0f)
初始化一个单位矩阵.
This means, that an identity matrix can be initialized by the single parameter 1.0: glm::mat4(1.0f)
.
以某种方式更改代码:
glm::mat4 trans(1.0f);
另请参见 OpenGL数学(GLM); 2.向量和矩阵构造器
See also OpenGL Mathematics (GLM); 2. Vector and Matrix Constructors
这篇关于glm返回nan进行简单翻译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!