| #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; |
| } |