- #version 330
-
- // Input vertex attributes (from vertex shader)
- in vec2 fragTexCoord;
- in vec3 fragNormal;
-
- // Input uniform values
- uniform sampler2D texture0;
- uniform vec4 colDiffuse;
-
- // Output fragment color
- out vec4 finalColor;
-
- // NOTE: Add here your custom variables
-
- // 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 (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 (colDiffuse.xyz*lightDiffuseColor*lightIntensity*diffuse);
- }
-
- // Calculate specular lighting component
- vec3 SpecularLighting(in vec3 N, in vec3 L, in vec3 V)
- {
- 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 (matSpecularColor*lightSpecularColor*lightSpecIntensity*specular);
- }
-
- void main()
- {
- // Normalize input vectors
- 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);
-
- // Texel color fetching from texture sampler
- vec4 texelColor = texture(texture0, fragTexCoord);
-
- // Calculate final fragment color
- finalColor = vec4(texelColor.rgb*(ambient + diffuse + specular), texelColor.a);
- }
|