@@ -5,22 +5,35 @@ layout(location = 0) out vec4 f_color;
55in vec3 v_normal;
66in vec3 v_position;
77
8- uniform vec3 u_diffuse;
9- uniform vec3 u_specular;
10- uniform vec3 u_emissive;
11- uniform float u_shininess;
8+ struct Material {
9+ vec3 diffuse;
10+ vec3 specular;
11+ vec3 emissive;
12+ float shininess;
13+ };
14+
15+ struct DirectionalLight {
16+ vec3 direction;
17+
18+ vec3 diffuse;
19+ vec3 specular;
20+ vec3 ambient;
21+ };
22+
23+ uniform Material u_material;
24+ uniform DirectionalLight u_directional_light;
1225
1326void main()
1427{
1528 // Vector from fragment to camera (camera always at 0,0,0)
1629 vec3 view = normalize(-v_position);
17- vec3 light = normalize(vec3(1.0f, 1.0f, 1.0f));
1830 vec3 normal = normalize(v_normal);
19- vec3 reflection = reflect(-light, normal);
2031
21- vec3 ambient = u_diffuse * 0.2;
22- vec3 diffuse = max(dot(normal, light), 0.0) * u_diffuse;
23- vec3 specular = pow(max(dot(reflection, view), 0.000001), u_shininess) * u_specular;
32+ vec3 light = normalize(-u_directional_light.direction);
33+ vec3 reflection = reflect(u_directional_light.direction, normal);
34+ vec3 ambient = u_directional_light.ambient * u_material.diffuse;
35+ vec3 diffuse = u_directional_light.diffuse * max(dot(normal, light), 0.0) * u_material.diffuse;
36+ vec3 specular = u_directional_light.specular * pow(max(dot(reflection, view), 0.000001), u_material.shininess) * u_material.specular;
2437
25- f_color = vec4(ambient + diffuse + specular + u_emissive , 1.0f);
38+ f_color = vec4(ambient + diffuse + specular + u_material.emissive , 1.0f);
2639}
0 commit comments