2023-11-18 02:25:43 +01:00
|
|
|
#version 430 core
|
|
|
|
|
|
|
|
uniform vec3 color;
|
2023-11-25 13:34:52 +01:00
|
|
|
uniform vec3 lightPos;
|
2023-11-18 02:25:43 +01:00
|
|
|
uniform vec3 lightColor;
|
|
|
|
uniform vec3 cameraPos;
|
|
|
|
|
|
|
|
uniform float time;
|
2023-11-25 13:34:52 +01:00
|
|
|
uniform float lightExp;
|
2023-11-18 02:25:43 +01:00
|
|
|
|
|
|
|
in vec3 vertexNormalOut;
|
2023-11-18 02:56:00 +01:00
|
|
|
in vec3 vertexPosOut;
|
2023-11-18 02:25:43 +01:00
|
|
|
out vec4 outColor;
|
|
|
|
|
2023-11-25 13:34:52 +01:00
|
|
|
|
2023-11-18 02:25:43 +01:00
|
|
|
void main()
|
|
|
|
{
|
2023-11-25 13:34:52 +01:00
|
|
|
vec3 lightDir = normalize(vertexPosOut - lightPos);
|
|
|
|
|
|
|
|
float lightDistance = length(vertexPosOut - lightPos);
|
|
|
|
vec3 newLightColor = lightColor / pow(lightDistance, 2);
|
|
|
|
|
2023-11-18 02:25:43 +01:00
|
|
|
vec3 normalizedVertexNormal = normalize(vertexNormalOut);
|
|
|
|
float intensity = dot(normalizedVertexNormal, -lightDir);
|
|
|
|
intensity = max(intensity, 0.0);
|
|
|
|
|
|
|
|
vec3 viewDir = normalize(cameraPos - vertexPosOut);
|
|
|
|
vec3 reflectDir = reflect(lightDir, normalizedVertexNormal);
|
|
|
|
|
|
|
|
float glossPow = 8;
|
|
|
|
float specular = pow(max(dot(viewDir, reflectDir), 0.0), glossPow);
|
|
|
|
|
|
|
|
float diffuse = intensity;
|
2023-11-25 13:34:52 +01:00
|
|
|
outColor = vec4(newLightColor * (color * diffuse + specular ), 1.0);
|
|
|
|
outColor = 1 - exp(-outColor * lightExp);
|
2023-11-18 02:25:43 +01:00
|
|
|
}
|