下面是我的phong实现方法,我正在绘制一个球体。它的参数是vec3球体法线(这是我的vec3命中点 - vec3 sphereOrigin)和摄像机位置vec3(0,0,-5)。
使用couts我发现我的镜面反射计算中的点积返回〜-4.9xxx,所以0总是在它所包含的max函数中获胜,并且还会使该行的其余部分变得多余,因为它是' s这种方法有问题吗?
同样看起来很暗,我将光强度调到(5,5,5)以获得更好的球体。
vec3 implementPhong(vec3 normal, vec3 camera){
vec3 lightSource1(0,0,-1);
vec3 nLightSource1 = normalize(lightSource1);
float zero = 0;
//Material properties brass
vec3 ambient(0.329412, 0.223529, 0.027451);
vec3 diffuse_albedo = vec3(0.780392, 0.568627, 0.113725);
vec3 specular_albedo = vec3(0.992157,0.941176,0.807843);
float specular_power = 27.8974;
vec3 light_intensity = vec3(1,1,1);
vec3 realLight = light_intensity * nLightSource1;
vec3 reflection = reflect(-realLight, normal);
vec3 diffuse = std::max<float>(dot(normal, realLight), zero) * diffuse_albedo;
vec3 specular = pow(std::max<float>(dot(reflection, camera), zero), specular_power) * specular_albedo;
vec3 color = ambient + diffuse + specular;
return color;
}
当前图片:http://imgur.com/U1ihxS0 Phong仅在前方球体上进行尝试。