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