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 :

probleme lumiere position & direction


Sujet :

OpenGL

  1. #1
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut probleme lumiere position & direction
    Salut...
    Je developpe sous delphi et voici mon probleme.

    Je declare ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       Light_Model        : Array[0..3] Of GLfloat = (1,1,1, 1.0 );
       Lumiere_blanche    : Array[0..3] Of GLfloat = (1,1,1, 1.0 );
       Lumiere_violet     : Array[0..3] Of GLfloat = (0.6,0.2,1, 1.0 );
     
       Lumiere_Position   : Array[0..3] Of GLfloat = (-2.0, 0.0, 0.0, 1.0 );
       Lumiere_Direction  : Array[0..3] Of GLfloat = (0, 0.0, 0.0, 1.0 );
    ensuite je parametre mes source de lumiere comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        glLightfv(GL_LIGHT0,GL_POSITION,@Lumiere_Position);
        glLightfv(GL_LIGHT0,GL_DIFFUSE ,@Lumiere_blanche);
        glLightfv(GL_LIGHT0,GL_SPECULAR,@Lumiere_violet);
        glLightfv(GL_LIGHT0,GL_AMBIENT ,@Lumiere_violet);
        glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,@Lumiere_Direction);
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT,@Light_Model);
     
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_DEPTH);
    et j'obtient ceci:
    http://www.developpez.net/forums/att...1&d=1145870051
    Le carré jaune symbolise la source de lumiere et le carré rouge sa direction.

    Mon probleme, vous l'aurais peut-etre remarqué, vient du fait que les position et direction de la
    source lumineuse ne correspondent pas du tout aux positions des carrés.
    On voit clairement que celle-ci vient plutot du coin superieur gauche.

    Si quelqu'un a deja eu ce soucis, ou si quelqu'un voit d'ou cela peut venir
    Alors n'hésitez pas à vous faire connaitre
    (On dirai un algo)

    D'avance merci
    Images attachées Images attachées  

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    a priori, le probleme viens d'un glTranslate...
    en effet, les glTranslate affecte tout les objets qui sont situé apres l'appel au glTranslate donc si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    positionnement lumiere
    glTranslate(x,y,z)
    affichage cube
    affichage position lumieres
    les lumieres serons aussi translaté. ce qu'il faut faire dans ce cas la c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    positionnement lumieres
    glPushMatrix()
    glTranslate(x,y,z)
    affichage cube
    glPopMatrix()
    affichage position lumieres
    ou encore (moins propre mais doit aussi fonctionner)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    positionnement lumiere
    affichage position lumieres
    glTranslate(x,y,z)
    affichage cube
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Salut.
    Bon ben deja je n'utilise pas de glTranslate. Mais J'utilise des glRotatef (le probleme est le meme) donc a priori et selon toi le probleme peut venir de là (moi ca me semble bizare mais soit..).
    Bon je vais tout de meme essayer.

    qu'entend tu par
    affichage position lumieres

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glLightfv(GL_LIGHT0,GL_POSITION,@Lumiere_Position);
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    D'accord.
    Dans ce cas qu'entends tu par:
    positionnement lumieres

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    argle... je me suis melangé la...
    donc le positionnement de la lumiere c'est quand on donne la position de la lumiere à openGL, donc c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glLightfv(GL_LIGHT0,GL_POSITION,@Lumiere_Position);
    et l'affichage de la position de la lumiere, c'est quand tu affiche le point dans l'espace avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glBegin(GL_POINTS);
    glVertex3f(x,y,z)
    glEnd();
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Ah Ok.
    Bon ben ca change rien.
    Si la lumiere ne tourne pas avec la scene. c'est déja ca.
    Mais j'ai toujours le meme probleme.
    http://www.developpez.net/forums/att...1&d=1145959322
    Le point jaune est censée etre la source lumineuse.
    Or on voit bien que la lumiere provient d'ailleur.
    Ou alors montrez moi qu'il faut que j'aille chez l'ophtalmo.
    Au fait..
    on voit bien qu'il y a également une lumiere ambiente alors que je ne me sert que GL_LIGHT0. est-ce normal?
    Images attachées Images attachées  

  8. #8
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Salut,

    il faudrait que tu revois tes paramèteres, entre autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lumiere_Direction  : Array[0..3] Of GLfloat = (0, 0.0, 0.0, 1.0 );
    Ton vecteur direction est... NULL, comment veux tu qu'OpenGL sache dans quelle direction ton SPOT envoie la lumière ?
    à moins que tu ne voulais pas utiliser un SPOT ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT,@Light_Model);
    et là tu met la lumière ambiante à la valeur Light_Model
    donc normal qu'il y ait une lumière ambiante

    [EDIT] je reviens pour te préciser 2 petites choses qui peuvent t'aider à comprendre l'utilisation des sources lumineuses OpenGL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glLightfv(GL_LIGHTi, GL_AMBIENT, @tab_valeurs);
    te permet de paramétrer la valeur d'éclairage ambient d'une source lumineuse
    afin d'éviter le noir complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT,@Light_Model);
    te permet de paramétrer l'intensité et la couleur de la lumière ambiante partout dans ton univers, quelque soit la ou les lumières présentes qui viennent ajouter leur grain de sel
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  9. #9
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Merci Shenron666. Mon probleme est résolu grace a tes explications.
    Direction est un vecteur. Je pensais qu'il s'agissait du point vers lequel le spot donnais.
    Merci également à bafman qui avait raison. On peut avoir des probleme en bougeant les plan. On peut obtenir un resultat qui n'est pas le bon.
    J'espere ne pas vous avoir trop ennuyé pour une tel etourderie.
    MERCI

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

Discussions similaires

  1. Probleme de position d'un movie clip
    Par switchnix dans le forum Flash
    Réponses: 1
    Dernier message: 01/03/2007, 09h39
  2. Probleme avec la recherche directe de methodes sur une Class (API java.lang.reflect)
    Par CyberChouan dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 25/01/2007, 17h12
  3. Probleme de position de chaine
    Par kubito dans le forum Langage
    Réponses: 4
    Dernier message: 24/03/2006, 21h12
  4. Probleme CSS position absolue et autre
    Par alexmorel dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 03/03/2006, 12h42
  5. [xml-xsl] Probleme avec position()
    Par seb30 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/04/2005, 11h10

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