#version 330 core in vec3 fragmentColor; in vec3 fragNormal; in vec3 fragVertex; 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; out vec3 color; 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; } color = clamp(totalBrightness, 0, 1) * fragmentColor; }