#version 400 out vec4 FragColor; in vec3 Position; in vec2 TexCoord; in vec3 Normal; uniform vec3 viewPosition; uniform sampler2D diffuse1; uniform sampler2D specular1; uniform vec3 phongAmbient; uniform vec3 phongDiffuse; uniform vec3 phongSpecular; uniform float phongShininess; uniform vec3 lightPos; uniform vec3 lightAmbient; uniform vec3 lightDiffuse; uniform vec3 lightSpecular; void main() { vec3 diffColor = texture(diffuse1, TexCoord).rgb; vec3 specColor = texture(specular1, TexCoord).rgb; vec3 ambient = (phongAmbient * diffColor) * lightAmbient; vec3 norm = normalize(Normal); vec3 lightDir = normalize(lightPos - Position); float diffImpact = max(dot(norm, lightDir), 0.0); vec3 diffuse = (phongDiffuse * diffImpact * diffColor) * lightDiffuse; vec3 viewDir = normalize(viewPosition - Position); vec3 halfwayDir = normalize(lightDir + viewDir); float specImpact = pow(max(dot(norm, halfwayDir), 0.0), phongShininess); vec3 specular = (phongSpecular * specImpact * specColor) * lightSpecular; vec3 result = ambient + diffuse + specular; FragColor = vec4(result, 1.0); }