1#version 120
2
3uniform sampler2D textureA;
4uniform sampler2D textureB;
5
6uniform vec4 color_ambient;
7uniform vec4 color_diffuse;
8uniform vec4 color_specular;
9uniform float shininess;
10
11void main (void) {
12
13  vec4 normal = texture2D (textureA, gl_TexCoord[0].st).xyzw;
14  vec4 color = texture2D (textureB, gl_TexCoord[0].st).yzwx;
15  //  gl_FragDepth = abs(color.a / normal.a);
16  //  gl_FragDepth = 0.0;
17  float depth = color.a / length(normal.xyz);
18  if (depth <= 0.0)
19	discard;
20
21  if (normal.a != 0.0) {
22
23	color.a = normal.a;
24	normal.a = length(normal.xyz);
25
26	color.rgb /= normal.a;
27 	normal.rgb = normalize(normal.rgb);
28
29	// Quality map
30	if (shininess == 99.0) {
31	  color.a *= normal.b;
32	  color.rgb = vec3(color.a, 1.0-color.a, 0.0);
33	}
34	// Normal map
35	else if (shininess == 98.0) {
36	  color.rgb = normal.rgb;
37	}
38	else if (shininess != 90.0) {
39	  vec3 lightVec = normalize(gl_LightSource[0].position.xyz);
40	  vec3 halfVec = gl_LightSource[0].halfVector.xyz; // normalize( lightVec - normalize(eyePos) );
41	  float aux_dot = dot(normal.xyz, lightVec);
42	  float diffuseCoeff = clamp(aux_dot, 0.0, 1.0);
43	  float specularCoeff = aux_dot>0.0 ? clamp(pow(clamp(dot(halfVec, normal.xyz),0.0,1.0), gl_FrontMaterial.shininess), 0.0, 1.0) : 0.0;
44	  color = vec4(color.rgb * ( gl_FrontLightProduct[0].ambient.rgb + diffuseCoeff * gl_FrontLightProduct[0].diffuse.rgb) + specularCoeff * gl_FrontLightProduct[0].specular.rgb, 1.0);
45
46
47/* 	  vec3 lightDir = normalize(vec3(gl_LightSource[0].position)); */
48
49/* 	  color = color * (gl_LightSource[0].ambient + gl_LightModel.ambient); */
50
51/* 	  float NdotL = max(dot(normal.xyz, lightDir.xyz), 0.0); */
52
53/* 	  if (NdotL > 0.0) { */
54/* 		color += color * gl_LightSource[0].diffuse * NdotL; */
55/* 		float NdotHV = max(dot(normal.xyz, gl_LightSource[0].halfVector.xyz), 0.0); */
56/* 		color += color * gl_LightSource[0].specular * pow(NdotHV, 1.0); */
57/* 	  } */
58	}
59	else {
60	  vec3 lightDir = normalize(vec3(gl_LightSource[0].position));
61
62	  color += color_ambient * (gl_LightSource[0].ambient + gl_LightModel.ambient);
63
64	  float NdotL = max(dot(normal.xyz, lightDir.xyz), 0.0);
65
66	  if (NdotL > 0.0) {
67		color += color_diffuse * gl_LightSource[0].diffuse * NdotL;
68		float NdotHV = max(dot(normal.xyz, gl_LightSource[0].halfVector.xyz), 0.0);
69		color += color_specular * gl_LightSource[0].specular * pow(NdotHV, shininess);
70	  }
71	}
72    color.a = 1.0;
73  }
74  else
75	discard;
76  //    color = vec4(1.0, 1.0, 1.0, 0.0);
77
78  gl_FragColor = color;
79  //gl_FragDepth = depth;
80}
81