aboutsummaryrefslogtreecommitdiff
path: root/shaders/glsl330/phong.fs
diff options
context:
space:
mode:
Diffstat (limited to 'shaders/glsl330/phong.fs')
-rw-r--r--shaders/glsl330/phong.fs87
1 files changed, 48 insertions, 39 deletions
diff --git a/shaders/glsl330/phong.fs b/shaders/glsl330/phong.fs
index 75b7e6d7..c14b346a 100644
--- a/shaders/glsl330/phong.fs
+++ b/shaders/glsl330/phong.fs
@@ -1,76 +1,85 @@
#version 330
-// Vertex shader input data
+// Input vertex attributes (from vertex shader)
in vec2 fragTexCoord;
in vec3 fragNormal;
-// Diffuse data
+// Input uniform values
uniform sampler2D texture0;
uniform vec4 fragTintColor;
-// Light attributes
-uniform vec3 light_ambientColor = vec3(0.6, 0.3, 0);
-uniform vec3 light_diffuseColor = vec3(1, 0.5, 0);
-uniform vec3 light_specularColor = vec3(0, 1, 0);
-uniform float light_intensity = 1;
-uniform float light_specIntensity = 1;
+// Output fragment color
+out vec4 finalColor;
-// Material attributes
-uniform vec3 mat_ambientColor = vec3(1, 1, 1);
-uniform vec3 mat_specularColor = vec3(1, 1, 1);
-uniform float mat_glossiness = 50;
+// NOTE: Add here your custom variables
-// World attributes
-uniform vec3 lightPos;
-uniform vec3 cameraPos;
+// Light uniform values
+uniform vec3 lightAmbientColor = vec3(0.6, 0.3, 0.0);
+uniform vec3 lightDiffuseColor = vec3(1.0, 0.5, 0.0);
+uniform vec3 lightSpecularColor = vec3(0.0, 1.0, 0.0);
+uniform float lightIntensity = 1.0;
+uniform float lightSpecIntensity = 1.0;
+
+// Material uniform values
+uniform vec3 matAmbientColor = vec3(1.0, 1.0, 1.0);
+uniform vec3 matSpecularColor = vec3(1.0, 1.0, 1.0);
+uniform float matGlossiness = 50.0;
+
+// World uniform values
+uniform vec3 lightPosition;
+uniform vec3 cameraPosition;
// Fragment shader output data
out vec4 fragColor;
+// Calculate ambient lighting component
vec3 AmbientLighting()
{
- return mat_ambientColor * light_ambientColor;
+ return (matAmbientColor*lightAmbientColor);
}
+// Calculate diffuse lighting component
vec3 DiffuseLighting(in vec3 N, in vec3 L)
{
- // Lambertian reflection calculation
- float diffuse = clamp(dot(N, L), 0, 1);
-
- return tintColor.xyz * light_diffuseColor * light_intensity * diffuse;
+ // Lambertian reflection calculation
+ float diffuse = clamp(dot(N, L), 0, 1);
+
+ return (fragTintColor.xyz*lightDiffuseColor*lightIntensity*diffuse);
}
+// Calculate specular lighting component
vec3 SpecularLighting(in vec3 N, in vec3 L, in vec3 V)
{
- float specular = 0;
-
- // Calculate specular reflection only if the surface is oriented to the light source
- if(dot(N, L) > 0)
- {
- // Calculate half vector
- vec3 H = normalize(L + V);
-
- // Calculate specular intensity
- specular = pow(dot(N, H), 3 + mat_glossiness);
- }
+ float specular = 0.0;
+
+ // Calculate specular reflection only if the surface is oriented to the light source
+ if (dot(N, L) > 0)
+ {
+ // Calculate half vector
+ vec3 H = normalize(L + V);
+
+ // Calculate specular intensity
+ specular = pow(dot(N, H), 3 + matGlossiness);
+ }
- return mat_specularColor * light_specularColor * light_specIntensity * specular;
+ return (matSpecularColor*lightSpecularColor*lightSpecIntensity*specular);
}
void main()
{
// Normalize input vectors
- vec3 L = normalize(lightPos);
- vec3 V = normalize(cameraPos);
+ vec3 L = normalize(lightPosition);
+ vec3 V = normalize(cameraPosition);
vec3 N = normalize(fragNormal);
+ // Calculate lighting components
vec3 ambient = AmbientLighting();
vec3 diffuse = DiffuseLighting(N, L);
vec3 specular = SpecularLighting(N, L, V);
- // Get base color from texture
- vec4 textureColor = texture(texture0, fragTexCoord);
- vec3 finalColor = textureColor.rgb;
-
- fragColor = vec4(finalColor * (ambient + diffuse + specular), textureColor.a);
+ // Texel color fetching from texture sampler
+ vec4 texelColor = texture(texture0, fragTexCoord);
+
+ // Calculate final fragment color
+ finalColor = vec4(texelColor.rgb*(ambient + diffuse + specular), texelColor.a);
} \ No newline at end of file