#version 330 core out vec4 FragColor; uniform vec3 lightColor; uniform vec3 objectColor; uniform vec3 viewPos; in vec3 FragPos; in vec3 Normal; in vec3 LightPos; const float ambientStrength = 0.2; const float shininess = 32.0; const float screenGamma = 2.2; // Assume the monitor is calibrated to the sRGB color space void main() { // FragColor = vec4(1.0f, 0.0f, 0.0f, 1.0f); vec3 lightDir = LightPos - FragPos; float distance = length(lightDir); vec3 norm = normalize(Normal); vec3 ambient = ambientStrength * lightColor; distance = distance * distance; lightDir = normalize(lightDir); float lambertian = max(dot(norm, lightDir), 0.0); vec3 diffuse = lambertian * lightColor; float specular = 0.0; if (lambertian > 0.0) { vec3 viewDir = normalize(-FragPos); vec3 halfDir = normalize(lightDir + viewDir); float specAngle = max(dot(halfDir, norm), 0.0); specular = pow(specAngle, shininess); } vec3 colorLinear = (ambient + diffuse + specular) * objectColor; // vec3 colorGammaCorrected = pow(colorLinear, vec3(1.0 / screenGamma)); FragColor = vec4(colorLinear, 1.0); // vec3 norm = normalize(Normal); }