I went ahead and attached the model and textures. 
Thanks, 
George
 
Vertex:
 
	Code: 
	#version 120
uniform int NumLights;
varying vec3 vPosition;
varying vec3 tPosition;
varying vec3 tView;
varying vec3 tang;
varying vec3 binorm;
varying vec3 normal;
varying vec3 tLightPosition[gl_MaxLights];
varying vec3 tLightDirection[gl_MaxLights];
attribute vec3 Tangent;
attribute vec3 Binormal;
void main()
{
	//Calculate components in view space
	vec3 position = vec3(gl_ModelViewMatrix * gl_Vertex);
	normal = normalize(gl_NormalMatrix * gl_Normal);
	tang = normalize(gl_NormalMatrix * Tangent);
	binorm = normalize(gl_NormalMatrix * Binormal);
	
	mat3 mToTangentSpace = mat3(
	tang.x, binorm.x, normal.x, 
	tang.y, binorm.y, normal.y,
	tang.z, binorm.z, normal.z);
	
	tView = mToTangentSpace * (position * -1.0); 
	tPosition = mToTangentSpace * position;
	//Iterate over every light and transition position into tangent space
	for( int i = 0 ; i < NumLights ; i++)
	{
		tLightPosition[i] = mToTangentSpace * gl_LightSource[i].spotDirection.xyz;
		tLightPosition[i] = mToTangentSpace * gl_LightSource[i].position.xyz;
	}
	//Pass and transform texture coordinates
	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
	//Pass Perspecitive Coordinates
	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
	
	//Compute Fog
	gl_FogFragCoord = gl_FogCoord;
}
 Fragment:
 
	Code: 
	#version 120
uniform int NumLights;
varying vec3 vPosition;
varying vec3 tPosition;
varying vec3 tView;
varying vec3 normal;
varying vec3 tang;
varying vec3 binorm;
varying vec3 tLightPosition[gl_MaxLights];
varying vec3 tLightDirection[gl_MaxLights];
uniform sampler2D Albedo;
uniform sampler2D NormalMap;
uniform sampler2D AmbientOcclusionMap;
//Calculates and returns the contribution of a directional light
void DirectionalLight(in int i,
						in vec3 position,
						in vec3 view,
						in vec3 normal,
						inout vec4 ambient,
						inout vec4 diffuse, 
						inout vec4 specular)
{	
	float nDotL; //normal dotted with light vector
	float nDotH; //normal dotted with half vector
	float pf;
	
	nDotL = max(0.0, dot(normal, normalize(tLightPosition[i])));
		
	nDotH = max(0.0, dot(normal, normalize( normalize(tLightPosition[i]) + view) ));
	
	if( nDotL > 0.0)
		pf = pow(nDotH, gl_FrontMaterial.shininess);
	else
		pf = 0.0;
	
	ambient += gl_LightSource[i].ambient;
	diffuse += gl_LightSource[i].diffuse * nDotL;
	specular += gl_LightSource[i].specular * pf;
	
}
//Caculates and returns the contribution of a spotlight
void PointLight( in int i,
					in vec3 position,
					in vec3 view,
					in vec3 iNormal,
					inout vec4 ambient,
					inout vec4 diffuse,
					inout vec4 specular)
{
	float nDotL;
	float nDotH;
	float pf;
	float attenuation;
	float d;
	vec3 LP;
	vec3 halfVector;
	LP = tLightPosition[i] - position; 
	d = length(LP); // distance from surface to light for attenuation
	vec3 tLP = normalize(tLightPosition[i]);
	
	attenuation = 1.0 / (gl_LightSource[i].constantAttenuation
						+ gl_LightSource[i].linearAttenuation * d
						+ gl_LightSource[i].quadraticAttenuation * d * d);
	halfVector = normalize(tLP + view);
	nDotL = max(0.0, dot(iNormal, tLP));
	nDotH = max(0.0, dot(iNormal, halfVector));
	
	if (nDotL > 0.0)
		pf = pow(nDotH, gl_FrontMaterial.shininess);
	else
		pf = 0.0;
	
	ambient += gl_LightSource[i].ambient * attenuation;
	diffuse += gl_LightSource[i].diffuse * nDotL * attenuation;
	specular += gl_LightSource[i].specular * pf * attenuation;
}
void SpotLight(in int i,
				in vec3 position,
				in vec3 view,
				in vec3 normal,
				inout vec4 ambient,
				inout vec4 diffuse,
				inout vec4 specular)
{
	float nDotL;
	float nDotH;
	float pf;
	float spotDot;
	float spotAttenuation;
	float attenuation;
	float d;
	vec3 LV;
	vec3 halfVector;
	
	LV = tLightPosition[i] - position;
	d = length(LV);
	LV = normalize(LV);
	
	attenuation = 1.0 / (gl_LightSource[i].constantAttenuation + 
						gl_LightSource[i].linearAttenuation * d + 
						gl_LightSource[i].quadraticAttenuation * d * d);
	
	spotDot = dot(LV, normalize( tLightDirection[i]));
	
	if(spotDot < gl_LightSource[i].spotCosCutoff)
		spotAttenuation = 0.0;
	else
		spotAttenuation = pow(spotDot, gl_LightSource[i].spotExponent);
		
	attenuation *= spotAttenuation;
	
	halfVector = normalize(LV + view);
	
	nDotL = max(0.0, dot(normal, LV));
	nDotH = max(0.0, dot(normal, halfVector));
	
	if(nDotL == 0.0) pf = 0.0;
	else pf = pow(nDotH, gl_FrontMaterial.shininess);
	
	ambient += gl_LightSource[i].ambient * attenuation;
	diffuse += gl_LightSource[i].diffuse * nDotL * attenuation;
	specular += gl_LightSource[i].specular * pf * attenuation;
}
void main()
{
	vec4 albedo = 		texture2D(Albedo , gl_TexCoord[0].xy);
	vec3 texNormal = 	normalize(texture2D(NormalMap, gl_TexCoord[0].xy).rgb);
	vec3 ao = 			texture2D(AmbientOcclusionMap, gl_TexCoord[0].xy).rgb;
	
	vec4 ambient = vec4(0.0);
	vec4 diffuse = vec4(0.0);
	vec4 specular = vec4(0.0);
	
	vec3 ntView = normalize(tView);
	
	for(int i = 0; i < NumLights; i++)
	{
		if (gl_LightSource[i].position.w == 0.0)
			DirectionalLight(i, tPosition, ntView, texNormal, ambient, diffuse, specular);
			
		else if (gl_LightSource[i].spotCutoff == 180.0)
			PointLight(i, tPosition, ntView, texNormal, ambient, diffuse, specular);
			
		else
			SpotLight(i, tPosition, ntView, texNormal, ambient, diffuse, specular);
	}
	
	//Linear fog calculation
	float dist = abs(vPosition.z);
	float fogFactor =(gl_Fog.end - dist) * gl_Fog.scale;
	fogFactor = clamp(fogFactor, 0.0, 1.0);
	
	vec4 color = (ambient * gl_FrontMaterial.ambient + diffuse * gl_FrontMaterial.diffuse) * albedo; //Albedo
	color = color + (specular * gl_FrontMaterial.specular);//Spec
	//color = color * vec4(ao,1.0);
	color = mix( gl_Fog.color, color, fogFactor); //Fog
	
	gl_FragColor = color;
}
 
		 
		
		
		
			
		
		
		
		
		
		
		
		
	
	 |