3 uniform sampler2D texmap;
6 uniform samplerCube envmap;
9 uniform sampler2DShadow shadowmap;
12 varying vec3 vpos, vdir, normal;
14 varying vec4 shadow_tc;
23 #define KD gl_FrontMaterial.diffuse.rgb
26 #define KS gl_FrontMaterial.specular.rgb
27 #define SPOW gl_FrontMaterial.shininess
29 #define LD(i) gl_LightSource[i].diffuse.rgb
30 #define LS(i) gl_LightSource[i].specular.rgb
31 #define LPOS(i) gl_LightSource[i].position.xyz
33 vec3 calc_diffuse(in vec3 n, in vec3 l, in vec3 color, in vec3 lcol)
35 float ndotl = max(dot(n, l), 0.0);
36 return color * lcol * ndotl;
39 vec3 calc_specular(in vec3 n, in vec3 l, in vec3 v, in vec3 color, in vec3 lcol)
41 vec3 h = normalize(l + v);
42 float ndoth = max(dot(n, h), 0.0);
43 return color * lcol * pow(ndoth, SPOW);
50 vec4 texel = texture2D(texmap, gl_TexCoord[0].st);
53 float shadow = shadow2DProj(shadowmap, shadow_tc).x;
55 const float shadow = 1.0;
58 vec3 n = normalize(normal);
59 vec3 v = normalize(vdir);
61 vec3 diffuse = vec3(0.0, 0.0, 0.0);
62 vec3 specular = vec3(0.0, 0.0, 0.0);
66 vec3 l = normalize(LPOS(0) - vpos);
67 diffuse += calc_diffuse(n, l, KD, LD(0)) * shadow;
68 specular += calc_specular(n, l, v, KS, LS(0)) * shadow;
73 vec3 l = normalize(LPOS(1) - vpos);
74 diffuse += calc_diffuse(n, l, KD, LD(1)) * shadow;
75 specular += calc_specular(n, l, v, KS, LS(1)) * shadow;
80 vec3 l = normalize(LPOS(2) - vpos);
81 diffuse += calc_diffuse(n, l, KD, LD(2)) * shadow;
82 specular += calc_specular(n, l, v, KS, LS(2)) * shadow;
88 vec3 rdir = -reflect(wdir, n);
89 vec3 env_texel = textureCube(envmap, rdir).xyz;
90 specular += KS * env_texel;
93 vec3 ambient = gl_LightModel.ambient.rgb * KD;
94 gl_FragColor.rgb = ambient + diffuse;// + specular;
96 gl_FragColor.a = gl_FrontMaterial.diffuse.a * texel.a;
98 gl_FragColor.a = gl_FrontMaterial.diffuse.a;