+ "vec3 ambient = vec3(0.1, 0.1, 0.1) * frag_color;\n"
+ "vec3 specular = vec3(0.3, 0.3, 0.3);\n"
+ "float distance = length(light_position - vtx_world);\n"
+ "vec3 n = normalize(normal);\n"
+ "vec3 l = normalize(light_direction);\n"
+ "float cos_theta = clamp(dot(n, l), 0, 1);\n"
+ "vec3 E = normalize(eye);\n"
+ "vec3 R = reflect(-l, n);\n"
+ "float cos_alpha = clamp(dot(E, R), 0, 1);\n"
+ "color = ambient"
+ " + frag_color * light_color * light_power * cos_theta / (distance * distance)"
+ " + specular * light_color * light_power * pow(cos_alpha, 5) / (distance * distance);\n"