#version 400 core layout( triangles, fractional_even_spacing, ccw ) in; out EyeSpaceVertex { vec3 position; vec3 normal; } te_out; uniform mat4 modelViewMatrix; uniform mat3 normalMatrix; uniform mat4 projectionMatrix; uniform mat4 mvp; void main() { float u = gl_TessCoord.x; float v = gl_TessCoord.y; float w = gl_TessCoord.z; vec4 p0 = gl_in[0].gl_Position; vec4 p1 = gl_in[1].gl_Position; vec4 p2 = gl_in[2].gl_Position; // Linearly interpolate to the vertex position using the // (u,v) barycentric coords vec4 pos = (u * p0) + (v * p1) + (w * p2); // Transform to eye space (for lighting calcs) te_out.position = vec3( modelViewMatrix * pos ); // Assume normal points along z te_out.normal = normalize( normalMatrix * vec3( 0.0, 0.0, 1.0 ) ); // Transform to clip-space gl_Position = mvp * pos; }