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%