#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_normal; out vec4 finalColor; void main() { vec4 texel = texture(texture0, frag_texcoord) * frag_colour; if (texel.a < 0.5) { discard; } texel.rgb += colDiffuse.rgb; vec3 normal = normalize(frag_normal); if (!gl_FrontFacing) { normal = -normal; } float sun_diffuse = max(dot(normal, sun_direction), 0.0); 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 = max( ambient_light + sun_light + moon_light, vec3(0.0) ); finalColor = vec4(texel.rgb * lighting, 1.0); }