diff --git a/examples/resources/shaders/glsl330/phong.fs b/examples/resources/shaders/glsl330/phong.fs index 2e7a95f6a..80e3d6735 100644 --- a/examples/resources/shaders/glsl330/phong.fs +++ b/examples/resources/shaders/glsl330/phong.fs @@ -4,73 +4,79 @@ 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.0); -uniform vec3 light_diffuseColor = vec3(1.0, 0.5, 0.0); -uniform vec3 light_specularColor = vec3(0.0, 1.0, 0.0); -uniform float light_intensity = 1.0; -uniform float light_specIntensity = 1.0; +// Output fragment color +out vec4 finalColor; -// Material attributes -uniform vec3 mat_ambientColor = vec3(1.0, 1.0, 1.0); -uniform vec3 mat_specularColor = vec3(1.0, 1.0, 1.0); -uniform float mat_glossiness = 50.0; +// 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; -// Fragment shader output data -out vec4 fragColor; +// 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; + +// 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 (fragTintColor.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.0; + 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 + mat_glossiness); - } + // 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 diff --git a/examples/shaders_basic_lighting.c b/examples/shaders_basic_lighting.c index 18aea8e18..d72eb4176 100644 --- a/examples/shaders_basic_lighting.c +++ b/examples/shaders_basic_lighting.c @@ -41,23 +41,23 @@ int main() // Model initialization Vector3 position = { 0.0f, 0.0f, 0.0f }; Model model = LoadModel("resources/model/dwarf.obj"); - Shader shader = LoadShader("resources/shaders/phong.vs", "resources/shaders/phong.fs"); + Shader shader = LoadShader("resources/shaders/glsl330/phong.vs", "resources/shaders/glsl330/phong.fs"); SetModelShader(&model, shader); // Shader locations initialization - int lIntensityLoc = GetShaderLocation(shader, "light_intensity"); - int lAmbientLoc = GetShaderLocation(shader, "light_ambientColor"); - int lDiffuseLoc = GetShaderLocation(shader, "light_diffuseColor"); - int lSpecularLoc = GetShaderLocation(shader, "light_specularColor"); - int lSpecIntensityLoc = GetShaderLocation(shader, "light_specIntensity"); + int lIntensityLoc = GetShaderLocation(shader, "lightIntensity"); + int lAmbientLoc = GetShaderLocation(shader, "lightAmbientColor"); + int lDiffuseLoc = GetShaderLocation(shader, "lightDiffuseColor"); + int lSpecularLoc = GetShaderLocation(shader, "lightSpecularColor"); + int lSpecIntensityLoc = GetShaderLocation(shader, "lightSpecIntensity"); - int mAmbientLoc = GetShaderLocation(shader, "mat_ambientColor"); - int mSpecularLoc = GetShaderLocation(shader, "mat_specularColor"); - int mGlossLoc = GetShaderLocation(shader, "mat_glossiness"); + int mAmbientLoc = GetShaderLocation(shader, "matAmbientColor"); + int mSpecularLoc = GetShaderLocation(shader, "matSpecularColor"); + int mGlossLoc = GetShaderLocation(shader, "matGlossiness"); // Camera and light vectors shader locations - int cameraLoc = GetShaderLocation(shader, "cameraPos"); - int lightLoc = GetShaderLocation(shader, "lightPos"); + int cameraLoc = GetShaderLocation(shader, "cameraPosition"); + int lightLoc = GetShaderLocation(shader, "lightPosition"); // Model and View matrix locations (required for lighting) int modelLoc = GetShaderLocation(shader, "modelMatrix");