#version 150 #extension GL_ARB_separate_shader_objects : enable layout(location = 0) in vec4 position_in; layout(location = 1) in vec3 normal_in; layout(location = 2) in vec3 diffuse_in; layout(location = 3) in vec4 transform_in; layout(location = 0) out vec4 colour_out; uniform gear_block { uniform mat4 mvp_matrix; uniform mat3 normal_matrix; } gear; void main() { const vec3 l_pos = vec3(5.0, 5.0, 10.0); vec3 dir, normal; vec4 position; float att; position.x = transform_in.x * position_in.x - transform_in.y * position_in.y + transform_in.z; position.y = transform_in.x * position_in.y + transform_in.y * position_in.x + transform_in.w; position.zw = position_in.zw; gl_Position = gear.mvp_matrix * position; dir = normalize(l_pos - gl_Position.xyz / gl_Position.w); normal.x = transform_in.x * normal_in.x - transform_in.y * normal_in.y; normal.y = transform_in.x * normal_in.y + transform_in.y * normal_in.x; normal.z = normal_in.z; att = 0.2 + dot(dir, normalize(gear.normal_matrix * normal)); colour_out.xyz = diffuse_in.xyz * att; colour_out.w = 1.0; }