0

下面是我绘制球体的 phong 实现方法。它的参数是 vec3 球体法线(这是我的 vec3 生命值 - vec3 sphereOrigin)和相机位置 vec3 (0,0,-5)。

使用 couts 我发现我的高光计算中的点积返回 ~ -4.9xxx,所以 0 总是在它包含的 max 函数中获胜,并且由于它是 0,所以该行的其余部分是多余的。有什么问题吗这个方法?

而且它看起来很暗,我将光强度提高到 (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 仅尝试在前球体 atm 上。

4

0 回答 0