|
@@ -415,16 +415,16 @@ IGL_INLINE void igl::OpenGL_state::init()
|
|
|
"vec3 Ia = La * Kai;" // ambient intensity
|
|
|
|
|
|
"vec3 light_position_eye = vec3 (view * vec4 (light_position_world, 1.0));"
|
|
|
- "vec3 distance_to_light_eye = light_position_eye - position_eye;"
|
|
|
- "vec3 direction_to_light_eye = normalize (distance_to_light_eye);"
|
|
|
+ "vec3 vector_to_light_eye = light_position_eye - position_eye;"
|
|
|
+ "vec3 direction_to_light_eye = normalize (vector_to_light_eye);"
|
|
|
"float dot_prod = dot (direction_to_light_eye, normal_eye);"
|
|
|
- "dot_prod = max (dot_prod, 0.0);"
|
|
|
- "vec3 Id = Ld * Kdi * dot_prod;" // Diffuse intensity
|
|
|
+ "float clamped_dot_prod = max (dot_prod, 0.0);"
|
|
|
+ "vec3 Id = Ld * Kdi * clamped_dot_prod;" // Diffuse intensity
|
|
|
|
|
|
"vec3 reflection_eye = reflect (-direction_to_light_eye, normal_eye);"
|
|
|
"vec3 surface_to_viewer_eye = normalize (-position_eye);"
|
|
|
"float dot_prod_specular = dot (reflection_eye, surface_to_viewer_eye);"
|
|
|
- "dot_prod_specular = max (dot_prod_specular, 0.0);"
|
|
|
+ "dot_prod_specular = float(abs(dot_prod)==dot_prod) * max (dot_prod_specular, 0.0);"
|
|
|
"float specular_factor = pow (dot_prod_specular, specular_exponent);"
|
|
|
"vec3 Is = Ls * Ksi * specular_factor;" // specular intensity
|
|
|
"vec4 color = vec4(lighting_factor * (Is + Id) + Ia, 1.0) + vec4((1.0-lighting_factor) * Kdi,1.0);"
|