Bonjour j'ai un problème pour utiliser la lumière dans opengl ...

je créé un cube sous maya je l'exporte en fichier.obj du coup dans mon programme java je récupère les points les normales et les faces (voir format obj ...) bref ensuite je veux l'afficher donc ça marche , je lui fais faire des rotations x y z ça marche.

Là je veux mettre en place une lumière donc je fais ça là c'est ma méthode pour initialiser:

Code : 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
 
public void init(GLAutoDrawable gLDrawable) 
    {
    	System.out.println("init() called");
 
        GL2 gl = gLDrawable.getGL().getGL2();
        gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
        gl.glShadeModel(GL2.GL_FLAT);
        gl.glEnable(GL.GL_DEPTH_TEST);
 
 
        gl.glEnable(GL2.GL_LIGHTING);
        gl.glEnable(GL2.GL_LIGHT0);
        gl.glEnable(GL2.GL_SMOOTH);
        gl.glEnable(GL2.GL_NORMALIZE);
 
        //float light_diffuse[] ={1.0f,1.0f,0.0f,1.0f}; 
        //gl.glLightfv(GL2.GL_LIGHT0,GL2.GL_DIFFUSE,light_diffuse,0);
        FPSAnimator a=new FPSAnimator(gLDrawable,60);
        a.start();
    }

donc je mets en place la lumière 0 ensuite dans mon draw qui est appelé 60 fois /s (voir fpsanimator)

la méthode est longue je la mets comme ça juste pour la mettre

Code : 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
public void display(GLAutoDrawable gLDrawable) 
    {
 
 
    	final GL2 gl = gLDrawable.getGL().getGL2();
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT|GL.GL_DEPTH_BUFFER_BIT);
 
        gl.glMatrixMode(GL2.GL_MODELVIEW);
        gl.glLoadIdentity();
 
        float light_position[] ={-30.0f,0.0f,0.0f,1.0f}; // position de la lumière
        gl.glLightfv(GL2.GL_LIGHT0,GL2.GL_POSITION,light_position,0);
 
 
        gl.glTranslatef(0.0f,0.0f,-20.0f);
        gl.glRotatef(angle,0.0f,1.0f,0.0f);
 
        gl.glBegin(GL2.GL_QUADS);
 
        Iterator t=faces.iterator();
        Integer []c;
 
        while(t.hasNext()){
 
        	c=(Integer[])t.next();
 
        	gl.glColor3f(1.0f,0.0f,0.0f);
 
 
        	gl.glNormal3f(normales.get(c[1]-1)[0],normales.get(c[1]-1)[1],normales.get(c[1]-1)[2]);
        	gl.glVertex3f(vertex.get(c[0]-1)[0],vertex.get(c[0]-1)[1],vertex.get(c[0]-1)[2]);
 
        	gl.glNormal3f(normales.get(c[3]-1)[0],normales.get(c[3]-1)[1],normales.get(c[3]-1)[2]);
            gl.glVertex3f(vertex.get(c[2]-1)[0],vertex.get(c[2]-1)[1],vertex.get(c[2]-1)[2]);
 
            gl.glNormal3f(normales.get(c[5]-1)[0],normales.get(c[5]-1)[1],normales.get(c[5]-1)[2]);
            gl.glVertex3f(vertex.get(c[4]-1)[0],vertex.get(c[4]-1)[1],vertex.get(c[4]-1)[2]);
 
            gl.glNormal3f(normales.get(c[7]-1)[0],normales.get(c[7]-1)[1],normales.get(c[7]-1)[2]);
            gl.glVertex3f(vertex.get(c[6]-1)[0],vertex.get(c[6]-1)[1],vertex.get(c[6]-1)[2]);
 
 
 
        }
 
        gl.glEnd();
        gl.glFlush();
        angle=(angle+1)%360;
 
    }

bref dans cette méthode je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
float light_position[] ={-30.0f,0.0f,0.0f,1.0f}; // position de la lumière
        gl.glLightfv(GL2.GL_LIGHT0,GL2.GL_POSITION,light_position,0);

normalement ma lumière est censé être à gauche de mon écran donc éclairer la gauche de mon cube qui tourne en sur lui même en y le problème c'est que ce n'est pas le cas les faces s'illuminent du côté gauche et quand elles sont faces à moi aussi et s'éteignent à droite ensuite le cube fais un tour sans qu'aucunes faces ne s'illuminent.

j'ai essayé de mettre ma lumière à la meilleur hauteur que mon cube cad:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
float light_position[] ={-30.0f,0.0f,-20.0f,1.0f}; // position de la lumière
        gl.glLightfv(GL2.GL_LIGHT0,GL2.GL_POSITION,light_position,0);
mais rien ne change ...


edit: mes normales ont une norme == 1 je le précise au cas où