IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème avec la lumière (jogl:opengl)


Sujet :

Java

  1. #1
    Inactif  
    Inscrit en
    Mai 2012
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut Problème avec la lumière (jogl:opengl)
    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ù

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Citation Envoyé par Alays Voir le message
    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);
    Attention, là t'as changé le Z pas le Y (hauteur)

    Plusieurs pistes :
    - Affiche tes normales (GL_LINES) pour voir si elles sont correctes
    - Essaye avec une sphere toute faite (GLU), c'est plus facile de vérifier un éclairage sur une Sphere que sur un Cube, surtout avec un éclairage FLAT.

    Concernant le OBJ, je sais que via blender il faut inverser des axes (Y/Z) car le repère n'est pas le même entre Blender/OpenGL, peut être faut-il faire la même chose avec Maya.

    Edit : Une petite vidéo avec Fraps aiderait à comprendre le problème.

    Edit 2 : Pour les questions propres à OpenGL, je te suggère de t'adresser sur ce forum. Tu auras plus de réponses.

  3. #3
    Inactif  
    Inscrit en
    Mai 2012
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut
    voici les normales de mon carré :

    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
     
    vn 0.000000 0.000000 1.000000
    vn 0.000000 0.000000 1.000000
    vn 0.000000 0.000000 1.000000
    vn 0.000000 0.000000 1.000000
    vn 0.000000 1.000000 0.000000
    vn 0.000000 1.000000 0.000000
    vn 0.000000 1.000000 0.000000
    vn 0.000000 1.000000 0.000000
    vn 0.000000 0.000000 -1.000000
    vn 0.000000 0.000000 -1.000000
    vn 0.000000 0.000000 -1.000000
    vn 0.000000 0.000000 -1.000000
    vn 0.000000 -1.000000 0.000000
    vn 0.000000 -1.000000 0.000000
    vn 0.000000 -1.000000 0.000000
    vn 0.000000 -1.000000 0.000000
    vn 1.000000 0.000000 0.000000
    vn 1.000000 0.000000 0.000000
    vn 1.000000 0.000000 0.000000
    vn 1.000000 0.000000 0.000000
    vn -1.000000 0.000000 0.000000
    vn -1.000000 0.000000 0.000000
    vn -1.000000 0.000000 0.000000
    vn -1.000000 0.000000 0.000000
    je fais une translation en 0 0 -20 de ce cube

    c'est pour ça je me suis dis je mets ma lumière à la même hauteur(en pensant profondeur ...) et à gauche donc -30 0 -20
    et voici une vidéo de ce que j'ai ~30mo :ici

Discussions similaires

  1. Problème avec la lumière (jogl:opengl)
    Par Alays dans le forum OpenGL
    Réponses: 4
    Dernier message: 31/10/2012, 13h12
  2. Problème avec code::blocks et opengl
    Par Dietzer dans le forum Code::Blocks
    Réponses: 4
    Dernier message: 19/06/2009, 19h24
  3. Problème avec le "light mapping" OpenGL ?
    Par zambizi dans le forum OpenGL
    Réponses: 6
    Dernier message: 02/03/2008, 11h09
  4. [OpenGL] Problème avec glGetString
    Par djo.mos dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 17/06/2005, 11h12
  5. Problèmes avec les lumières
    Par Blackhorn dans le forum OpenGL
    Réponses: 2
    Dernier message: 27/12/2004, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo