#if __VERSION__ == 120 #define in attribute #define out varying #endif uniform mat4 transformationMatrix; uniform mat4 projectionMatrix; uniform vec3 light; #if __VERSION__ != 120 && defined(GL_ARB_explicit_attrib_location) #extension GL_ARB_explicit_attrib_location: enable layout(location = 0) in vec4 position; layout(location = 1) in vec3 normal; #else in vec4 position; in vec3 normal; #endif out vec3 transformedNormal; out vec3 lightDirection; out vec3 cameraDirection; void main() { /* Transformed vertex position */ vec4 transformedPosition4 = transformationMatrix*position; vec3 transformedPosition = transformedPosition4.xyz/transformedPosition4.w; /* Transformed normal vector */ transformedNormal = normalize(mat3x3(transformationMatrix)*normal); /* Direction to the light */ lightDirection = normalize(light - transformedPosition); /* Direction to the camera */ cameraDirection = -transformedPosition; /* Transform the position */ gl_Position = projectionMatrix*transformedPosition4; }