rendering-basic-light.frag
1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
varying mediump vec3 vNormal;
varying mediump vec3 vFragPos;
uniform mediump vec3 viewPos; // custom uniform
struct Material
{
mediump vec3 ambient;
mediump vec3 diffuse;
mediump vec3 specular;
mediump float shininess;
};
struct Light
{
mediump vec3 position;
mediump vec3 color;
};
uniform Material material; // custom uniform
uniform Light light; // custom uniform
void main()
{
// Ambient
mediump vec3 ambient = material.ambient * light.color;
// Diffuse
mediump vec3 norm = normalize(vNormal);
mediump vec3 lightDir = normalize(light.position - vFragPos);
mediump float diff = max(dot(norm, lightDir), 0.0);
mediump vec3 diffuse = material.diffuse * diff * light.color;
// Specular
mediump vec3 viewDir = normalize(viewPos - vFragPos);
mediump vec3 reflectDir = reflect(-lightDir, norm);
mediump float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);
mediump vec3 specular = material.specular * spec * light.color;
mediump vec3 result = (ambient + diffuse + specular);
gl_FragColor = vec4(result, 1.0);
}