54 lines
1.0 KiB
GLSL

#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);
}