Add basics of materials
[opengl.git] / texturefrag.glsl
1 #version 330
2
3 struct Material {
4         vec3 ambient;
5         vec3 diffuse;
6         vec3 specular;
7         float shininess;
8         bool hasTexture;
9 };
10
11 in vec3 normal;
12 in vec3 fragPos;
13 in vec2 texCoord;
14
15 uniform vec3 lightPos;
16 uniform vec3 viewPos;
17 uniform vec4 lightColor;
18
19 uniform Material material;
20 uniform sampler2D tex;
21
22 out vec4 FragColor;
23
24 void main() {
25         vec3 lightDir = normalize(fragPos - lightPos);
26         vec3 diffuse = max(0, dot(-normal, lightDir)) * material.diffuse;
27
28         vec3 viewDir = normalize(fragPos - viewPos);
29         vec3 reflectDir = reflect(-lightDir, normal);
30         vec3 specular = pow(max(0, dot(viewDir, reflectDir)), material.shininess) * material.specular;
31
32         vec4 lighting = vec4(material.ambient + diffuse + specular, 1) * lightColor;
33
34         if (material.hasTexture)
35                 FragColor = lighting * texture(tex, texCoord);
36         else
37                 FragColor = lighting;
38 }
39