Visual C++项目中glm::isnan()编译失败问题求助
解决Visual C++中glm::isnan()编译错误的问题
哦,这个坑我之前踩过!你遇到的编译错误error C2440: 'initializing' : cannot convert from 'glm::detail::tvec3' to 'bool',核心原因是GLM中针对向量的isnan()是逐元素计算的:
当你传入glm::vec3类型的参数时,glm::isnan()不会返回单个bool,而是返回一个和输入同维度的布尔向量(也就是glm::bvec3,包含三个布尔值,对应原向量每个元素是否为NaN)。你试图把这个向量赋值给单个bool变量,自然会触发类型不匹配的错误。
根据你的需求,这里有几种解决方案:
如果需要判断向量中任意一个元素是NaN,用
glm::any()包装一下结果:bool b = glm::any(glm::isnan(my_vector));只要x/y/z中有一个是NaN,这个表达式就会返回
true。如果需要判断向量中所有元素都是NaN,则用
glm::all():bool b = glm::all(glm::isnan(my_vector));只有x/y/z全为NaN时,才会返回
true。如果只是想检查向量的单个元素是否为NaN,直接访问元素即可:
bool b = glm::isnan(my_vector.x); // 检查x分量,同理可以用y/z
补充一句:GLM的API设计是贴合向量运算逻辑的,大部分针对向量的函数都会返回同维度的向量结果,文档里提到的返回true/false是针对标量输入(比如float类型)的情况,下次用向量作为参数时记得留意这点哦~
内容的提问来源于stack exchange,提问作者Octo
相关产品推荐
相关产品推荐

