varying vec3 N; varying vec3 v; varying float ambient_occlusion_term; void main (void) { vec3 L = normalize(gl_LightSource[0].position.xyz); vec3 E = normalize(-v); vec3 R = normalize(-reflect(L,N)); //calculate Ambient Term: vec4 Iamb = gl_LightSource[0].ambient; //calculate Diffuse Term: vec4 Idiff = gl_LightSource[0].diffuse * max(dot(N,L), 0.0); // calculate Specular Term: vec4 Ispec = gl_LightSource[0].specular * pow(max(dot(R,E),0.0),0.3*gl_FrontMaterial.shininess); // write Total Color: // Without GL_COLOR_MATERIAL //vec4 color = gl_FrontLightModelProduct.sceneColor + Iamb + Idiff + Ispec; // With GL_COLOR_MATERIAL ?? vec4 theColor = vec4(gl_Color); vec4 color = (gl_FrontMaterial.emission + 1.5*theColor* Iamb + 1.2*theColor* Idiff + Ispec); color.a = gl_Color.a; float fogFactor = (gl_Fog.end - gl_FogFragCoord)*gl_Fog.scale; fogFactor = clamp(fogFactor,0.0,1.0); gl_FragColor = mix(gl_Fog.color, color, fogFactor ); // This is for the future. //gl_FragColor.rgb *= ambient_occlusion_term; }