uniform vec3 light_pos;
uniform mat4 light_matrix;
attribute vec3 tangent;
void main(void)
{
vec3 eye_pos = -vec3(gl_ModelViewMatrix * gl_Vertex);
vec3 t = normalize(gl_NormalMatrix * tangent);
vec3 n = normalize(gl_NormalMatrix * gl_Normal);
vec3 b = cross(n, t);
vec3 Light = vec3(light_matrix * vec4(light_pos, 1.0));
Light += eye_pos;
vec3 v;
v.x = dot(Light, t);
v.y = dot(Light, b);
v.z = dot(Light, n);
vec3 light_dir = normalize(v);
mat4 ProjectionMatrix;
vec4 Vert = gl_Vertex * gl_ModelViewMatrix;
vec3 p = vec3(0.0, 0.0, 0.0);
vec3 pNormal = vec3(0.0, 1.0, 0.0);
vec3 Px = light_pos;
float NDotP = dot(pNormal, p); float d = dot(pNormal, p); float NDotPplusD = NDotP - d;
ProjectionMatrix[0].x = NDotPplusD - (Px.x * pNormal.x);
ProjectionMatrix[0].y = -(Px.x * pNormal.y);
ProjectionMatrix[0].z = -(Px.x * pNormal.z);
ProjectionMatrix[0].w = -(Px.x * d);
ProjectionMatrix[1].x = -(Px.y * pNormal.x);
ProjectionMatrix[1].y = NDotPplusD - (Px.y * pNormal.y);
ProjectionMatrix[1].z = -(Px.y * pNormal.z);
ProjectionMatrix[1].w = -(Px.y * d);
ProjectionMatrix[2].x = -(Px.z * pNormal.x);
ProjectionMatrix[2].y = -(Px.z * pNormal.y);
ProjectionMatrix[2].z = NDotPplusD - (Px.z * pNormal.z);
ProjectionMatrix[2].w = -(Px.z * d);
ProjectionMatrix[3].x = -pNormal.x;
ProjectionMatrix[3].y = -pNormal.y;
ProjectionMatrix[3].z = -pNormal.z;
ProjectionMatrix[3].w = NDotP;
gl_Position = Vert * ProjectionMatrix * gl_ProjectionMatrix;
gl_FrontColor = vec4(1.0);
}