|
@@ -1,85 +0,0 @@
|
|
|
-#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);
|
|
|
-}
|