]> git.tdb.fi Git - libs/gl.git/commitdiff
Adjust specular calculation in the Phong shader
authorMikko Rasa <tdb@tdb.fi>
Mon, 12 Apr 2021 14:40:04 +0000 (17:40 +0300)
committerMikko Rasa <tdb@tdb.fi>
Mon, 12 Apr 2021 14:40:04 +0000 (17:40 +0300)
Since the look vector points towards the surface, it makes more sense
to calculate the reflected vector towards the light.  The calculation
is symmetric so the result is the same.

shaderlib/phong.glsl

index 482f895b44e3e80e50e92586a5c2144319b110c7..570024ab1b5aaa27f22c8796a05d2353c8349511 100644 (file)
@@ -85,10 +85,8 @@ vec3 phong_one_light(vec3 light, vec3 normal, vec3 look, vec3 light_color, vec3
        vec3 color = light_color*surface_diffuse*diffuse_intensity;
        if(use_specular)
        {
-               /* The light vector points towards the light, so reflected will point
-               towards the surface - but so does the look vector. */
-               vec3 reflected = reflect(light, normal);
-               float specular_intensity = pow(max(dot(reflected, look), 0.0), shininess);
+               vec3 reflected = reflect(look, normal);
+               float specular_intensity = pow(max(dot(reflected, light), 0.0), shininess);
                color += light_color*surface_specular*specular_intensity;
        }
        return color;