#version 330 // Input vertex attributes (from vertex shader) in vec3 fragPosition; in vec2 fragTexCoord; in vec4 fragColor; in vec3 fragNormal; // Input uniform values uniform sampler2D texture0; uniform vec4 colDiffuse; // Output fragment color out vec4 finalColor; #define MAX_LIGHTS 12 struct Light { int enabled; vec3 position; vec4 color; }; uniform Light lights[MAX_LIGHTS]; uniform vec4 ambient; void main() { vec4 texelColor = texture(texture0, fragTexCoord); if (texelColor.a == 0.0) discard; if (fragColor.b < 1.0) { finalColor = vec4(1.0, 1.0, 1.0, 1.0); } else { vec3 lightDot = vec3(0.0); vec4 tint = colDiffuse * fragColor; vec3 normal = normalize(fragNormal); float lightpower = 0.0; // finalColor.rgb = vec3(0.0); for (int i = 0; i < MAX_LIGHTS; i++) { if (lights[i].enabled == 1) { // finalColor.r += 0.05; vec3 light = vec3(0.0); light = normalize(lights[i].position - fragPosition); float dist = distance(lights[i].position, fragPosition); float near = smoothstep(5.0, 2.0, dist); float far = smoothstep(30.0, 1.0, dist) / 3.0; float power = near + far * far * far; lightpower += power; float NdotL = max(dot(normal, light), 0.0); // lightDot += lights[i].color.rgb * light * NdotL; // lightDot += lights[i].color.rgb * power * NdotL; lightDot += lights[i].color.rgb * power; } } finalColor.rgb = (texelColor.rgb * lightDot); // finalColor.rgb = normal; // finalColor = (texelColor * vec4(lightDot, 1.0)); // finalColor = pow(finalColor, vec4(1.0/2.2)); // finalColor.rgb = fragPosition; } }