varying vec3 n, l, h; #vertex void main() { // normal vector, light direction, half vector n = normalize(gl_NormalMatrix * gl_Normal); l = normalize(vec3(gl_LightSource[0].position) - vec3(gl_ModelViewMatrix * gl_Vertex)); h = normalize(gl_LightSource[0].halfVector.xyz); // the rest gl_FrontColor = gl_Color; gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = ftransform(); } #fragment uniform sampler2D tex; void main() { float d; vec3 nn; vec4 col = gl_Color * gl_LightModel.ambient; // lighting nn = normalize(n); nn = normalize(nn + 0.5 * (texture2D(tex, gl_TexCoord[0].xy).xyz - vec3(0.5, 0.5, 0.5))); d = dot(nn, normalize(l)); if (d > 0.0) { col += gl_Color * d; d = dot(nn, normalize(h)); if (d > 0.0) col += gl_FrontMaterial.specular * pow(d, gl_FrontMaterial.shininess); } gl_FragColor = col; }