Pārlūkot izejas kodu

fixed back facing specular highlight

Former-commit-id: 0ce56f2a70caa49c04f84cf0a90abf89b93e152b
Alec Jacobson 10 gadi atpakaļ
vecāks
revīzija
42f0889172
1 mainītis faili ar 5 papildinājumiem un 5 dzēšanām
  1. 5 5
      include/igl/viewer/OpenGL_state.cpp

+ 5 - 5
include/igl/viewer/OpenGL_state.cpp

@@ -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);"