Opengl ES 漫反射着色器不工作
Opengl ES diffuse shader not working
我正在片段着色器中为球体实现简单的光线追踪,我目前正在研究为漫反射着色球体计算颜色的函数。这是函数的代码:
vec3 shadeSphere(vec3 point, vec4 sphere, vec3 material) {
vec3 color = vec3(1.,2.,3.);
vec3 N = (point - sphere.xyz) / sphere.w;
vec3 diffuse = max(dot(Ldir, N), 0.0);
vec3 ambient = material/5;
color = ambient + Lrgb * diffuse * max(0.0, N * Ldir);
return color;
}
我在使用 max 函数的两行中遇到错误。我从使用函数 max(dot(ec_light_dir, ec_normal), 0.0);
的 webgl 作弊 sheet 获得了我分配 max(dot(Ldir,N),0.0)
的行的代码
出于某种原因,我的实现无法正常工作,因为我收到错误:
ERROR: 0:38: 'max' : no matching overloaded function found
我使用的这些 max 函数可能有什么问题?
dot
乘积是标量值而不是 vec3
,您需要将其存储在浮点数中
float diffuse = max(dot(Ldir, N),0.0);
或者用它初始化一个 vec3
vec3 diffuse = vec3(max(dot(Ldir, N),0.0));
ambient
项也是如此。通常漫射项和环境项都只是标量。
您的着色器中有 2 个 max
语句。问题是第二个
max(0.0, N * LDir)
没有意义。 N
是一个 vec3。 max
没有采用 max(float, vec3)
的版本。 是 max
的一个版本 max(vec3, float)
所以把它换成
`max(N * LDir, 0.0)`
它可能会起作用。基本上你的着色器是 NOT ES 2.0 着色器。也许它被用于不符合规范的驱动程序(即驱动程序有错误)。 WebGL 尝试遵循规范 100%
我正在片段着色器中为球体实现简单的光线追踪,我目前正在研究为漫反射着色球体计算颜色的函数。这是函数的代码:
vec3 shadeSphere(vec3 point, vec4 sphere, vec3 material) {
vec3 color = vec3(1.,2.,3.);
vec3 N = (point - sphere.xyz) / sphere.w;
vec3 diffuse = max(dot(Ldir, N), 0.0);
vec3 ambient = material/5;
color = ambient + Lrgb * diffuse * max(0.0, N * Ldir);
return color;
}
我在使用 max 函数的两行中遇到错误。我从使用函数 max(dot(ec_light_dir, ec_normal), 0.0);
的 webgl 作弊 sheet 获得了我分配 max(dot(Ldir,N),0.0)
的行的代码
出于某种原因,我的实现无法正常工作,因为我收到错误:
ERROR: 0:38: 'max' : no matching overloaded function found
我使用的这些 max 函数可能有什么问题?
dot
乘积是标量值而不是 vec3
,您需要将其存储在浮点数中
float diffuse = max(dot(Ldir, N),0.0);
或者用它初始化一个 vec3
vec3 diffuse = vec3(max(dot(Ldir, N),0.0));
ambient
项也是如此。通常漫射项和环境项都只是标量。
您的着色器中有 2 个 max
语句。问题是第二个
max(0.0, N * LDir)
没有意义。 N
是一个 vec3。 max
没有采用 max(float, vec3)
的版本。 是 max
的一个版本 max(vec3, float)
所以把它换成
`max(N * LDir, 0.0)`
它可能会起作用。基本上你的着色器是 NOT ES 2.0 着色器。也许它被用于不符合规范的驱动程序(即驱动程序有错误)。 WebGL 尝试遵循规范 100%