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

OpenGL Discussion :

lumière qui bouge alors qu'elle devrait être fixe. help!


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 12
    Points
    12
    Par défaut lumière qui bouge alors qu'elle devrait être fixe. help!
    Hello !
    Je ne m'en sort pas avec un problème de position de la lumière.
    J'ai une scène avec un objet qui tourne sur lui-même (modif de la position des vertex avant le dessin et pas glRotate...), une lumière aux coordonnées fixes, une camera fixe.

    Le souci, l'objet tourne sur lui-même autour d'Y et la lumière se balade de façon aléatoire autour de lui... je ne comprend pas. Comme si elle variait de façon foireuse ses coordonnées y (entre autre).

    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
    void renderScene ()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
        lightPos0[0] = 20.0;
        lightPos0[1] = 0.0;
        lightPos0[2] = 20.0;
        lightPos0[3] = 0.0;
     
        glLoadIdentity();
        glScalef(10,10,10);
        glTranslatef(0,0,-10.0);
        glRotatef(angleY*10,0.0, 1.0,0.0); // angleY est modifié au clavier
     
        glEnable( GL_LIGHTING );
        glEnable( GL_LIGHT0 );
        glLightfv( GL_LIGHT0, GL_POSITION, lightPos0 );
     
        glEnable(GL_DEPTH_TEST);
     
        glFrontFace(GL_CW);
     
        mesh.Rotate(0.0,0.01,0.0);
        mesh.Transform();
     
         mesh.Draw();
         // le point de la lumière
        glDisable(GL_LIGHTING);
     
        glutSwapBuffers();
    }
    Quelqu'un a une idée pourquoi ma lumière se ballade???

  2. #2
    Membre habitué Avatar de razmott
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 142
    Points
    142
    Par défaut
    Salut !

    Ton problème vient de la position de la lumière :
    en coordonnée homogène (20.0, 0.0, 20.0, 0.0) correspond à un point situé à l'infini dans la direction (1.0, 0.0, 1.0) ce que les cartes graphiques gèrent... très mal. Modifie la quatrième coordonnée en 1.0 et tout rentrera dans l'ordre (enfin j'espère)

    Pour info : les coordonnées que tu as donnée de la lumière sont (x, y, z, w). Les coordonnées réelles sont x/y, y/w, z/w. Autant dire qu'avec w = 0.0, ça va être dur...

    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
    void renderScene ()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        lightPos0[0] = 20.0;
        lightPos0[1] = 0.0;
        lightPos0[2] = 20.0;
        lightPos0[3] = 1.0;
     
        glLoadIdentity();
        glScalef(10,10,10);
        glTranslatef(0,0,-10.0);
        glRotatef(angleY*10,0.0, 1.0,0.0); // angleY est modifié au clavier
     
        glEnable( GL_LIGHTING );
        glEnable( GL_LIGHT0 );
        glLightfv( GL_LIGHT0, GL_POSITION, lightPos0 ); 
     
        glEnable(GL_DEPTH_TEST);
        glFrontFace(GL_CW);
     
        mesh.Rotate(0.0,0.01,0.0);
        mesh.Transform();
        mesh.Draw(); // le point de la lumière
     
        glDisable(GL_LIGHTING);
        glutSwapBuffers();
    }
    Mieux vaut prévoir que patcher.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Une coordonnée W nulle indique une lumière directionnelle (c'est le seul moyen de faire cette différenciation avec OpenGL), et je n'ai jamais entendu que c'était particulièrement mal géré

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Quand w=0, comle l'a dit Laurent c'est une lumière directionnelle.
    Il n'y a pas dans ce cas de division par 0, bien que ça revienne un peut à ça (lumière éloignée à l'infini).

    En fait dans ce cas la direction de la lumière est la même en tout point de la scène.
    Elle est donnée par le vecteur qui va du point défini par la position de la lumière, à l'origine (0, 0, 0).

    Ce qui donne une direction :
    (-x_lum, -y_lum, -z_lum).

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 12
    Points
    12
    Par défaut idem
    Merci pour les réponses rapides !

    C'est bon à savoir pour l'avenir l'utilité du w pour la position de la lumière.

    J'ai changé ça, mais ma lumière reste étrangement mobile.

    Une autre idée?

    Lorsque les coordonnées de la lumière sont passé par GL au vertex et frag shader du pipeline par défaut, ses coordonnées sont-elles exprimées dans le référentiel de l'objet, du monde ou de l'écran?

  6. #6
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    En fait le glLightfv( GL_LIGHT0, GL_POSITION, lightPos0 ); positionne la lumière dans le repère courant, donc celui de la matrice MODELVIEW.

    Étant donné que tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glLoadIdentity();
    glScalef(10,10,10);
    glTranslatef(0,0,-10.0);
    glRotatef(angleY*10,0.0, 1.0,0.0);
    la lumière va bouger... ça bouge plus que ce à quoi tu t'attendais, ou alors tu ne t'attendais pas à ce qu'elle bouge?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Je crois que j'ai compris l'idée. Faut que je me familiarise plus avec les étapes de transformations.

    J'ai pu corriger le problème (j'avais le même pour la position de la camera) avant d'envoyer la position de la lumière et de la camera à mes shaders... en les transformant dans le référentiel de mes meshs. Ca marche bien et c'est stable.

    Merci du coup de main!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2015, 09h20
  2. Réponses: 0
    Dernier message: 20/11/2014, 18h44
  3. Ma div ne bouge pas, alors qu'elle devrait
    Par Boris56 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 19/03/2010, 19h42
  4. Image de fonds qui bouge (alors qu'elle ne devrait pas)
    Par koukic11 dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 01/02/2010, 09h57
  5. Réponses: 8
    Dernier message: 26/10/2006, 16h46

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