uniform mat4 u_MVPMatrix;      		// A constant representing the combined GLModel/view/projection matrix.
uniform mat4 u_MVMatrix;       		// A constant representing the combined GLModel/view matrix.

attribute vec4 a_Position;     		// Per-vertex position information we will pass in.
attribute vec3 a_Normal;       		// Per-vertex normal information we will pass in.
attribute vec2 a_TexCoordinate;     // Per-vertex texture coordinate information we will pass in.

varying vec3 v_Position;       		// This will be passed into the fragment shader.
varying vec3 v_Normal;         		// This will be passed into the fragment shader.
varying vec2 v_TexCoordinate;       // This will be passed into the fragment shader.

void main()
{
    v_Position = vec3(u_MVMatrix * a_Position);         // Transform the vertex into eye space.
    v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0));  // Transform the normal's orientation into eye space.
    v_TexCoordinate = a_TexCoordinate;                  // Pass through the texture coordinate.
    gl_Position = u_MVPMatrix * a_Position;             // gl_Position is a special variable used to store the final position.
                                                        // Multiply the vertex by the matrix to get the final point in normalized screen coordinates.
}