mirror of
https://github.com/JoeyDeVries/LearnOpenGL.git
synced 2026-01-30 20:13:22 +08:00
49 lines
1.4 KiB
GLSL
49 lines
1.4 KiB
GLSL
#version 330 core
|
|
layout (location = 0) out vec4 FragColor;
|
|
layout (location = 1) out vec4 BrightColor;
|
|
|
|
in VS_OUT {
|
|
vec3 FragPos;
|
|
vec3 Normal;
|
|
vec2 TexCoords;
|
|
} fs_in;
|
|
|
|
struct Light {
|
|
vec3 Position;
|
|
vec3 Color;
|
|
};
|
|
|
|
uniform Light lights[4];
|
|
uniform sampler2D diffuseTexture;
|
|
uniform vec3 viewPos;
|
|
|
|
void main()
|
|
{
|
|
vec3 color = texture(diffuseTexture, fs_in.TexCoords).rgb;
|
|
vec3 normal = normalize(fs_in.Normal);
|
|
// Ambient
|
|
vec3 ambient = 0.0 * color;
|
|
// Lighting
|
|
vec3 lighting = vec3(0.0f);
|
|
vec3 viewDir = normalize(viewPos - fs_in.FragPos);
|
|
for(int i = 0; i < 4; i++)
|
|
{
|
|
// Diffuse
|
|
vec3 lightDir = normalize(lights[i].Position - fs_in.FragPos);
|
|
float diff = max(dot(lightDir, normal), 0.0);
|
|
vec3 result = lights[i].Color * diff * color;
|
|
// Attenuation (use quadratic as we have gamma correction)
|
|
float distance = length(fs_in.FragPos - lights[i].Position);
|
|
result *= 1.0 / (distance * distance);
|
|
lighting += result;
|
|
|
|
}
|
|
vec3 result = ambient + lighting;
|
|
// Check whether result is higher than some threshold, if so, output as bloom threshold color
|
|
float brightness = dot(result, vec3(0.2126, 0.7152, 0.0722));
|
|
if(brightness > 1.0)
|
|
BrightColor = vec4(result, 1.0);
|
|
// else
|
|
// BloomColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
FragColor = vec4(result, 1.0f);
|
|
} |