#version 330 core in vec3 fragColor; in vec3 fragNormal; in vec3 fragVertex; in vec2 fragUV; out vec4 color; uniform mat4 model; uniform mat3 normal_matrix; struct point_light { uint light_ID; vec3 position; vec3 color; float intensity; }; #define MAX_LIGHTS 10 uniform point_light lights[MAX_LIGHTS]; uniform uint num_lights = 0u; uniform sampler2D sampler; void main() { // https://www.tomdalling.com/blog/modern-opengl/06-diffuse-point-lighting vec3 normal = normalize(normal_matrix * fragNormal); vec3 fragPosition = vec3(model * vec4(fragVertex, 1)); float totalBrightness = 0; for (uint i = 0u; i < num_lights; i++) { vec3 surfaceToLight = lights[i].position - fragPosition; float brightness = dot(normal, surfaceToLight) / (length(surfaceToLight) * length(normal)); totalBrightness += brightness; } vec4 sampled_color = texture(sampler, fragUV.st); color = clamp(totalBrightness, 0, 1) * sampled_color; //color = vec4(clamp(totalBrightness, 0, 1) * fragColor, 0); }