diff options
author | jvech <jmvalenciae@unal.edu.co> | 2022-09-11 13:54:51 -0500 |
---|---|---|
committer | jvech <jmvalenciae@unal.edu.co> | 2022-09-11 13:54:51 -0500 |
commit | 86c7bdee944ce2f60d63124e9ddb76198ddbc676 (patch) | |
tree | b15a18f9439f11a92de94bf3be16c736a8c927ed /shaders/color.fsh | |
parent | ab2160bdd347f4cd827835f1687437d25fae94c6 (diff) |
learn: 14. Materials learnopengl book
Diffstat (limited to 'shaders/color.fsh')
-rw-r--r-- | shaders/color.fsh | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/shaders/color.fsh b/shaders/color.fsh new file mode 100644 index 0000000..4989d73 --- /dev/null +++ b/shaders/color.fsh @@ -0,0 +1,44 @@ +# version 330 core + +struct Material { + vec3 ambient; + vec3 diffuse; + vec3 specular; + float shininess; +}; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +in vec3 Normal; +in vec3 FragPos; + +out vec4 FragColor; + +uniform vec3 viewPos; +uniform Material material; +uniform Light light; + +void main() +{ + // ambient + vec3 ambient = material.ambient * light.ambient; + + // diffuse + vec3 norm = normalize(Normal); + vec3 lightDir = normalize(light.position - FragPos); + float diff = max(dot(norm, lightDir), 0.0); + vec3 diffuse = light.diffuse * diff * material.diffuse; + + // specular + vec3 viewDir = normalize(viewPos - FragPos); + vec3 reflectDir = reflect(-lightDir, norm); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + vec3 specular = light.specular * spec * material.specular; + + FragColor = vec4((specular + ambient + diffuse), 1.0f); +} |