GLSL文件报错no matching overloaded for function 'sqrt' found求排查
报错根因
- GLSL内置数学函数
sqrt仅支持浮点类型的入参,你代码中sqrt(3)的入参3是整数类型字面量,没有匹配的重载函数可供调用,因此编译器抛出该错误。 - 你代码中已经声明了中等精度的浮点类型,精度配置不属于本次报错的诱因。
修复方案
直接将sqrt的入参改为浮点类型即可,有两种常用写法:
- 写法1:使用浮点字面量
3.0替换整型3
bool cond = dist < threshold * sqrt(3.0);
- 写法2:对整数做显式浮点类型转换
bool cond = dist < threshold * sqrt(float(3));
额外优化建议
你当前计算两个vec3向量距离的代码可以直接调用GLSL内置distance函数简化,可读性更高也不易出错:
// 替代你原本手动展开计算平方和再开根的逻辑 float dist = distance(a, b);
内容的提问来源于stack exchange,提问作者Enthusiast
相关产品推荐
相关产品推荐

