X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=texturefrag.glsl;fp=texturefrag.glsl;h=347cc0121f35e4487e770e922c3f633010bf0486;hp=0000000000000000000000000000000000000000;hb=37cba564a96018a5500e942498d4e48c0ebe73ed;hpb=ba5e08bf25de722d907748ce55b27a45b2b270bf diff --git a/texturefrag.glsl b/texturefrag.glsl new file mode 100644 index 0000000..347cc01 --- /dev/null +++ b/texturefrag.glsl @@ -0,0 +1,39 @@ +#version 330 + +struct Material { + vec3 ambient; + vec3 diffuse; + vec3 specular; + float shininess; + bool hasTexture; +}; + +in vec3 normal; +in vec3 fragPos; +in vec2 texCoord; + +uniform vec3 lightPos; +uniform vec3 viewPos; +uniform vec4 lightColor; + +uniform Material material; +uniform sampler2D tex; + +out vec4 FragColor; + +void main() { + vec3 lightDir = normalize(fragPos - lightPos); + vec3 diffuse = max(0, dot(-normal, lightDir)) * material.diffuse; + + vec3 viewDir = normalize(fragPos - viewPos); + vec3 reflectDir = reflect(-lightDir, normal); + vec3 specular = pow(max(0, dot(viewDir, reflectDir)), material.shininess) * material.specular; + + vec4 lighting = vec4(material.ambient + diffuse + specular, 1) * lightColor; + + if (material.hasTexture) + FragColor = lighting * texture(tex, texCoord); + else + FragColor = lighting; +} +