#version 440 in vec3 f_color; out vec4 FragColors; uniform vec3 Kd; uniform vec3 Ka; uniform vec3 Ks; uniform float Shininess; uniform int LightCount; struct LightInfo { vec4 Position; vec3 Intensity; }; uniform LightInfo Light[64]; in vec3 fNormal; in vec3 pos; void main() { vec3 finalColor; vec3 ambient; ambient = Ka * Light[0].Intensity; for (int i=0; i< LightCount; i++) { vec3 L = normalize(Light[i].Position.xyz - pos); vec3 N = fNormal; vec3 V = normalize(-pos); //vec3 R = normalize(reflect(-L, N)); vec3 H = normalize(V + L); vec3 diffuse = Kd * Light[i].Intensity * max(dot(L, N), 0.0); vec3 specular = Ks * Light[i].Intensity * pow(max(dot(H, N), 0.0), Shininess); finalColor = finalColor + diffuse + specular; } finalColor = finalColor + ambient; //fog calculus float z = abs(pos.z); float f = (30 - z) / (30 - 1); vec3 fogColor = vec3(1, 1, 1); f = clamp(f, 0.0, 1.0); finalColor = mix(fogColor, finalColor, f); FragColors = vec4(finalColor, 1); }