attribute vec3 position; | |
attribute vec2 texcoord; | |
attribute vec3 normal; | |
attribute vec3 tangent; | |
uniform mat4 ModelViewProjectionMatrix; | |
uniform mat4 NormalMatrix; | |
varying vec2 TextureCoord; | |
varying vec3 NormalEye; | |
varying vec3 TangentEye; | |
varying vec3 BitangentEye; | |
void main(void) | |
{ | |
TextureCoord = texcoord; | |
// Transform normal, tangent and bitangent to eye space, keeping | |
// all of them perpendicular to the Normal. That is why we use | |
// NormalMatrix, instead of ModelView, to transform the tangent and | |
// bitangent. | |
NormalEye = normalize(vec3(NormalMatrix * vec4(normal, 1.0))); | |
TangentEye = normalize(vec3(NormalMatrix * vec4(tangent, 1.0))); | |
BitangentEye = normalize(vec3(NormalMatrix * vec4(cross(normal, tangent), 1.0))); | |
// Transform the position to clip coordinates | |
gl_Position = ModelViewProjectionMatrix * vec4(position, 1.0); | |
} |