nuclear@18: /* vi: set ft=glsl */ nuclear@18: uniform sampler2D tex; nuclear@18: uniform sampler2DShadow shadowmap; nuclear@18: nuclear@18: varying vec3 vdir, ldir, normal; nuclear@18: varying vec4 shadow_tc; nuclear@18: nuclear@18: #define KD gl_FrontMaterial.diffuse.rgb nuclear@18: #define KS gl_FrontMaterial.specular.rgb nuclear@18: #define SPOW gl_FrontMaterial.shininess nuclear@18: nuclear@18: void main() nuclear@18: { nuclear@18: float shadow = shadow2DProj(shadowmap, shadow_tc).x; nuclear@18: vec4 texel = texture2D(tex, gl_TexCoord[0].st); nuclear@18: nuclear@18: vec3 n = normalize(normal); nuclear@18: vec3 v = normalize(vdir); nuclear@18: vec3 l = normalize(ldir); nuclear@18: vec3 h = normalize(l + v); nuclear@18: nuclear@18: float ndotl = max(dot(n, l), 0.0); nuclear@18: float ndoth = max(dot(n, h), 0.0); nuclear@18: nuclear@18: vec3 albedo = KD * texel.rgb; nuclear@18: vec3 diffuse = albedo * gl_LightSource[0].diffuse.rgb * ndotl; nuclear@18: vec3 specular = KS * gl_LightSource[0].specular.rgb * pow(ndoth, SPOW); nuclear@18: nuclear@18: vec3 ambient = gl_LightModel.ambient.rgb * albedo; nuclear@18: gl_FragColor.rgb = ambient + (diffuse + specular) * shadow; nuclear@18: gl_FragColor.a = gl_FrontMaterial.diffuse.a * texel.a; nuclear@18: }