#define MAX_LIGHTS 2 /* Attributes */ attribute vec3 inVertexPosition; attribute vec3 inVertexNormal; attribute vec3 inVertexTangent; attribute vec3 inVertexBinormal; attribute vec4 inVertexColor; attribute vec2 inTexCoord0; /* Uniforms */ uniform mat4 uWVPMatrix; uniform mat4 uWVMatrix; uniform vec3 uEyePosition; uniform vec3 uLightPosition[MAX_LIGHTS]; uniform vec4 uLightColor[MAX_LIGHTS]; /* Varyings */ varying vec2 vTexCoord; varying vec3 vEyeVector; varying vec3 vLightVector[MAX_LIGHTS]; varying vec4 vLightColor[MAX_LIGHTS]; varying float vFogCoord; void main() { gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0); vTexCoord = inTexCoord0; vec3 EyeVector = uEyePosition - inVertexPosition; vEyeVector.x = dot(inVertexTangent, EyeVector); vEyeVector.y = dot(inVertexBinormal, EyeVector); vEyeVector.z = dot(inVertexNormal, EyeVector); vEyeVector *= vec3(1.0, -1.0, -1.0); for (int i = 0; i < int(MAX_LIGHTS); i++) { vec3 LightVector = uLightPosition[i] - inVertexPosition; vLightVector[i].x = dot(inVertexTangent, LightVector); vLightVector[i].y = dot(inVertexBinormal, LightVector); vLightVector[i].z = dot(inVertexNormal, LightVector); vLightColor[i].x = dot(LightVector, LightVector); vLightColor[i].x *= uLightColor[i].a; vLightColor[i] = vec4(inversesqrt(vLightColor[i].x)); vLightColor[i] *= uLightColor[i]; vLightColor[i].a = inVertexColor.a; vLightColor[i].x = clamp(vLightColor[i].x, 0.0, 1.0); vLightColor[i].y = clamp(vLightColor[i].y, 0.0, 1.0); vLightColor[i].z = clamp(vLightColor[i].z, 0.0, 1.0); } vFogCoord = length((uWVMatrix * vec4(inVertexPosition, 1.0)).xyz); }