Bonjour,
Je suis débutant en OpenGL et je souhaite faire une lampe type lampe de bureau avec du coup un lumière "spotlight" qui en provient.
J'ai regardé pas mal d'explication et de programme déjà fait mais je n'arrive pas à faire suivre ma lumière en rotation.
Je suis sous une vieille version d'OpenGL (demandé par mon école...).
Pouvez-vous m'aider s'il vous plait ?

Voici ce que j'ai actuellement, j'utilise la méthode d'illumination de Phong:
Code glsl : Sélectionner tout - Visualiser dans une fenêtre à part
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)  
 
}
 
 
}

Merci d'avance