1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #version 120
varying vec3 coordonnee_3d;
varying vec3 coordonnee_3d_locale;
varying vec3 normale;
varying vec4 color;
uniform sampler2D texture;
// vecteur position de ma lampe
uniform vec4 pos_lamp;
// matrice de rotation de ma lampe
uniform mat4 rot_lamp;
vec3 light = vec3(pos_lamp.x, pos_lamp.y, pos_lamp.z);
float angle;
void main (void)
{
//vecteurs pour le calcul d'illumination
vec4 light_new = rot_lamp *light ;
vec3 n = normalize(normale);
vec3 d = normalize(light_new.xyz-coordonnee_3d_locale);
vec3 r = reflect(d,n);
vec3 o = normalize(-coordonnee_3d_locale);
//calcul d'illumination
float diffuse = 0.5*clamp(dot(n,d),0.0,1.0);
float specular = 0.5*pow(clamp(dot(r,o),0.0,1.0),128.0);
float ambiant = 0.0;
//recuperation de la texture
vec2 tex_coord = gl_TexCoord[0].xy;
vec4 color_texture = texture2D(texture,tex_coord);
vec4 color_final = color*color_texture;
//couleur finale
angle = dot(d,n);
angle = max(angle,0);
// Test whether vertex is located in the cone
if(angle > radians(40))
gl_FragColor = (ambiant+diffuse)*color_final+specular*vec4(1.0,1.0,1.0,0.0); // (blanc)
else
gl_FragColor = (ambiant+diffuse)*color_final+specular*vec4(0.0,0.0,0.0,1.0); // (noir)
}
} |
Partager