Graphics 在glsl片段着色器中实现phong反射的问题

Graphics 在glsl片段着色器中实现phong反射的问题,graphics,opengl-es,glsl,raytracing,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, v

我已经编写了一个片段着色器,它使用光线跟踪对球体进行着色。我现在尝试实现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函数的第二个参数可能是导致问题的原因,但它似乎应该起作用。有人能发现函数的问题吗?

看起来你只是漏掉了点。“没有过载”的战俘,需要一个整数浮点数

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

谢谢,你说得对。我不知道我是怎么错过的。但现在它已经开始工作了,球体看起来不像是镜面反射的。从提供的代码来看,我是否正确实现了Phong模型?除非我误读,否则变量“Phong”实际上是镜面反射组件,因为它基于反射向量。试着把它调高一点:
float-phong=pow(reflect,20.)另请参见。