在glsl片段着色器

时间:2015-10-11 00:41:23

标签: graphics opengl-es glsl raytracing

我已经编写了一个片段着色器,它使用光线跟踪对球体进行着色。我现在尝试使用一个等式实现镜面反射的phong模型:R = 2(N•L)N - L其中L是光方向,N是表面法线。然后将反射矢量R的值插入:s_rgb max(0,E•R)^ p其中E是观察者的眼睛方向(在这种情况下,它是-w或光线的负方向),p是镜面反射功率和s_rgb是镜面反射的颜色。在我目前用于确定球体颜色的函数的实现中,我遇到了max和power函数的错误。以下是该函数的代码:

vec3 shadeSphere(vec3 point, vec4 sphere, vec3 material,vec3 eyeDir) {
      vec3 color = vec3(1.,2.,4.);
      vec3 N = (point - sphere.xyz) / sphere.w;
      float diffuse = max(dot(Ldir, N), 0.0);
      vec3 ambient = material/5.0;
      vec3 R = 2.*(dot(N, Ldir))*(N - Ldir);
      float reflect = max(0.0,dot(eyeDir,R));
      float phong= pow(reflect, 2);
      color = phong + ambient + Lrgb  *diffuse *  max(0.0, dot(N , Ldir));
      return color;
   }

由于某种原因,pow()函数返回错误
错误:0:49:' pow' :找不到匹配的重载函数``` 我认为max函数的第二个参数可能导致问题,但它似乎应该工作。任何人都可以通过该功能发现问题吗?

1 个答案:

答案 0 :(得分:2)

看起来你似乎只是错过了点。 "没有过载"对于带有int的浮点数的pow。

float phong= pow(reflect, 2);   // nope
float phong= pow(reflect, 2.);  // ok