#version 130 #extension GL_ARB_explicit_attrib_location: require uniform mat4 mvp; uniform mat3 mv_normal; uniform mat4x3 k_uniform[4]; layout(location = 0) in vec2 uv; out vec4 color; out vec2 frag_uv; // Direction of the normal in camera-space. out vec3 normal_cs; void main(void) { vec4 uhat = vec4((1 - uv.x) * (1 - uv.x) * (1 - uv.x), 3. * uv.x * (1 - uv.x) * (1 - uv.x), 3. * uv.x * uv.x * (1 - uv.x), uv.x * uv.x * uv.x); vec4 vhat = vec4((1 - uv.y) * (1 - uv.y) * (1 - uv.y), 3. * uv.y * (1 - uv.y) * (1 - uv.y), 3. * uv.y * uv.y * (1 - uv.y), uv.y * uv.y * uv.y); mat4x3 m; m[0] = k_uniform[0] * uhat; m[1] = k_uniform[1] * uhat; m[2] = k_uniform[2] * uhat; m[3] = k_uniform[3] * uhat; gl_Position = mvp * vec4(m * vhat, 1.0); /* Transform the normal by the inverse-transpose of the model-view * matrix. */ normal_cs = mv_normal * vec3(0., 1., 0.); frag_uv = uv; }