From 2a1557aa2b4d406c92703f60f2d34283fed5fcfb Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 13 Mar 2024 22:54:43 +0500 Subject: Did some work on materials, refactored a few things --- source/shaders/light_subject.fs.glsl | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/shaders/light_subject.fs.glsl (limited to 'source/shaders/light_subject.fs.glsl') diff --git a/source/shaders/light_subject.fs.glsl b/source/shaders/light_subject.fs.glsl new file mode 100644 index 0000000..54bf700 --- /dev/null +++ b/source/shaders/light_subject.fs.glsl @@ -0,0 +1,46 @@ +#version 330 core +struct Material { + vec3 ambient; + vec3 diffuse; + vec3 specular; + float shininess; +}; + +struct Light { + vec3 ambient; + vec3 diffuse; + vec3 specular; + + vec3 position; +}; + +in vec3 fragNormal; +in vec3 worldPosition; + +uniform Material material; +uniform Light light; +uniform vec3 cameraPosition; +uniform vec3 lightColor; +uniform sampler2D smilingTexture; +uniform sampler2D containerTexture; + +out vec4 FragColor; + +void main() { + vec3 ambientLight = light.ambient * material.ambient; + +// @note: Diffuse calculations + vec3 lightDir = normalize(light.position - worldPosition); + float diffuseStrength = max(dot(lightDir, fragNormal), 0.0); + vec3 diffuseLight = light.diffuse * (diffuseStrength * material.diffuse); + +// @note: Specular calculations + vec3 viewDir = normalize(cameraPosition - worldPosition); + vec3 reflectDir = reflect(-lightDir, fragNormal); + float specularity = max(dot(viewDir, reflectDir), 0.0); + float shinePower = pow(specularity, material.shininess); + vec3 specularLight = light.specular * (shinePower * material.specular); + + vec3 color = ambientLight + diffuseLight + specularLight; + FragColor = vec4(color, 1.0); +} -- cgit v1.2.3