#version 330 uniform sampler2D texture0; uniform vec4 colDiffuse; uniform vec3 sun_direction; uniform vec3 sun_colour; uniform float sun_intensity; uniform vec3 moon_direction; uniform vec3 moon_colour; uniform float moon_intensity; uniform vec3 ambient_colour; uniform float ambient_intensity; in vec2 frag_texcoord; in vec4 frag_colour; in vec3 frag_world_normal; out vec4 finalColor; void main() { vec3 normal = normalize(frag_world_normal); // float sun_diffuse = max( // dot(normal, sun_direction), // 0.0 // ); // half lambert float sun_diffuse = dot(normal, sun_direction) * 0.5 + 0.5; sun_diffuse *= sun_diffuse; float moon_diffuse = max( dot(normal, moon_direction), 0.0 ); vec3 ambient_light = ambient_colour * ambient_intensity; vec3 sun_light = sun_colour * sun_intensity * sun_diffuse; vec3 moon_light = moon_colour * moon_intensity * moon_diffuse; vec3 lighting = ambient_light + sun_light + moon_light; vec4 texel = texture(texture0, frag_texcoord) * colDiffuse * frag_colour; finalColor = vec4( texel.rgb * max(lighting, vec3(0.0)), texel.a ); }