#version 330 in vec3 vertexPosition; in vec2 vertexTexCoord; in vec3 vertexNormal; in vec4 vertexColor; uniform mat4 mvp; uniform mat4 matNormal; 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; out vec2 frag_texcoord; out vec4 frag_colour; out vec3 frag_lighting; void main() { vec3 world_normal = normalize( (matNormal * vec4(vertexNormal, 0.0)).xyz ); float sun_diffuse = max( dot(world_normal, sun_direction), 0.0 ); float moon_diffuse = max( dot(world_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; frag_lighting = ambient_light + sun_light + moon_light; frag_texcoord = vertexTexCoord; frag_colour = vertexColor; gl_Position = mvp * vec4(vertexPosition, 1.0); }