#version 120 varying vec3 vertex; varying vec3 normal; varying vec3 lightDirection; uniform vec3 lightColor; uniform vec3 lightPosition; uniform float materialKind; uniform vec3 materialColor; void main() { vec3 Eye = normalize(-vertex); vec3 Reflected = normalize(reflect( -lightPosition, normal)); vec3 IAmbient = vec3(0.05f); if (materialKind == 6) { // sun: shines by itself gl_FragColor = vec4(materialColor, 1.0); return; } // TODO: add noise texture vec3 IDiffuse = vec3(materialColor) * lightColor * max(dot(normal, lightDirection), 0.0); // TODO make instensity/exponent as parameter //vec3 ISpecular = lightColor * 5.0 * pow(max(dot(Reflected, Eye), 0.0), 2.0); vec3 ISpecular = lightColor * pow(max(dot(Reflected, Eye), 0.0), 2.0); if (dot(lightDirection, normal) <= 0.0) { ISpecular = vec3(0.0, 0.0, 0.0); } // p: point of the fragment on the surface //vec3 v_eye = normalize(pos_eye - pos_space); // point from p to eye //vec3 v_sun = normalize(sun_light_dir); // points from p to the sun //float specular = spec_int * pow( // clamp(dot((v_eye + v_sun)/2.0, normal), 0.0, 1.0), // 2.0*specular_exponent); //ISpecular = vec3(1.0, 0.0, 0.0) * specular; //gl_FragColor = vec4(ISpecular, 1.0); gl_FragColor = vec4((IAmbient + IDiffuse) + ISpecular, 1.0); //gl_FragColor = vec4(0.5+0.5*normal, 1.0); }