我在GLSL(着色语言)中进行计算,如下所示
int N = 3;
float sigma_H = 5
for(int i = 0 ;i < 3 ; i++){
float sigma_H_i = sigma_H * sqrt(3) * pow(2,(N - (i + 1))) / sqrt(pow(4,N) - 1.0);
}
我得到的错误是
webgl-utils.js:66 *** Error compiling shader '[object WebGLShader]':ERROR: 0:82: 'sqrt' : no matching overloaded function found
ERROR: 0:82: 'pow' : no matching overloaded function found
ERROR: 0:82: 'pow' : no matching overloaded function found
WARNING: 0:82: 'sqrt' : operation result is undefined for the values passed in
ERROR: 0:104: '' : syntax error
我知道错误出现在下面的代码块中,因为只要我删除了以下行就可以正确编译
float sigma_H_i = sigma_H * sqrt(3) * pow(2,(N - (i + 1))) / sqrt(pow(4,N) - 1.0);
可以任何人请告诉我为什么我得到这个错误,即没有动力功能,虽然我知道有&#39; pow()&#39;来自OpenGL Shading Language (GLSL) Quick Reference Guide
的GLSL中的函数我正在使用Google Chrome浏览器
答案 0 :(得分:3)
好吧,你的代码无效。根据GLSL ES规范:
当下面指定了内置函数时,输入参数(和相应的输出) 可以
float
,vec2
,vec3
或vec4
, genType 用作参数。
您使用int
调用它,并且GLSL不执行任何隐式转换(与C相反),因此正确的语法必须类似于
float sigma_H_i = sigma_H * sqrt(3.0) * pow(2.0,(float(N - (i + 1)))) / sqrt(pow(4.0,float(N)) - 1.0);