1 varying mediump vec3 vNormal;
2 varying mediump vec3 vFragPos;
3 uniform mediump vec3 viewPos; // custom uniform
10 mediump float shininess;
15 mediump vec3 position;
19 uniform Material material; // custom uniform
20 uniform Light light; // custom uniform
25 mediump vec3 ambient = material.ambient * light.color;
27 mediump vec3 norm = normalize(vNormal);
28 mediump vec3 lightDir = normalize(light.position - vFragPos);
29 mediump float diff = max(dot(norm, lightDir), 0.0);
30 mediump vec3 diffuse = material.diffuse * diff * light.color;
33 mediump vec3 viewDir = normalize(viewPos - vFragPos);
34 mediump vec3 reflectDir = reflect(-lightDir, norm);
35 mediump float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);
36 mediump vec3 specular = material.specular * spec * light.color;
37 mediump vec3 result = (ambient + diffuse + specular);
38 gl_FragColor = vec4(result, 1.0);