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_Position = ftransform(); } #fragment void main() { float d; vec3 nn; vec4 col = gl_Color * gl_LightModel.ambient; // lighting nn = normalize(n); d = dot(nn, normalize(l)); if (d > 0.0) { col += gl_Color * d; col += gl_FrontMaterial.specular * pow(max(dot(nn, normalize(h)), 0.000001), gl_FrontMaterial.shininess); } gl_FragColor = col; }