Partage
  • Partager sur Facebook
  • Partager sur Twitter

OpenGL Lumieres

probleme de lumieres

    17 mai 2007 à 20:56:32

    Bonjour tout le monde,

    J'ai un petit probleme avec les lumieres, On a possibilité de mettre 8 lumieres en OpenGL et moi je n'en ai qu une qui s'allume. J'ai l'impression de faire ce que dise tous les tutoriels et pourtant ca fait pas ce que je veux j'y pige rien.
    Voici mon code:
    "lumieres" est un tableau de 8 objets representant les lumieres.


     for(int I=0;I<8;I++)
     {
       float *position=lumieres[I]->getPosition();
       if(position[2]>balle->Z()+60)position[2]-=200;
       lumieres[I]->setPosition(position[0],position[1],position[2],position[3]);
       lumieres[I]->affiche();
     }
           lumieres[1]->setPosition(0,5,100,1);
           float sourceE[4]={1,1,1,1};
           glLightfv(GL_LIGHT0,GL_POSITION,lumieres[0]->getPosition());
           glLightfv(GL_LIGHT1,GL_POSITION,lumieres[1]->getPosition());
           glLightfv(GL_LIGHT2,GL_POSITION,lumieres[2]->getPosition());
           glLightfv(GL_LIGHT3,GL_POSITION,lumieres[3]->getPosition());

           glLightfv(GL_LIGHT4,GL_POSITION,lumieres[4]->getPosition());
           glLightfv(GL_LIGHT5,GL_POSITION,lumieres[5]->getPosition());
           glLightfv(GL_LIGHT6,GL_POSITION,lumieres[6]->getPosition());
           glLightfv(GL_LIGHT7,GL_POSITION,lumieres[7]->getPosition());

           glLightfv(GL_LIGHT0,GL_EMISSION,sourceE);
           glLightfv(GL_LIGHT1,GL_SPECULAR,sourceE);
           glLightfv(GL_LIGHT2,GL_EMISSION,sourceE);
           glLightfv(GL_LIGHT3,GL_EMISSION,sourceE);

           glLightfv(GL_LIGHT4,GL_EMISSION,sourceE);
           glLightfv(GL_LIGHT5,GL_EMISSION,sourceE);
           glLightfv(GL_LIGHT6,GL_EMISSION,sourceE);
           glLightfv(GL_LIGHT7,GL_EMISSION,sourceE);

           glEnable(GL_LIGHT0);
           glEnable(GL_LIGHT1);
           glEnable(GL_LIGHT2);
           glEnable(GL_LIGHT3);
           glEnable(GL_LIGHT4);
           glEnable(GL_LIGHT5);
           glEnable(GL_LIGHT6);
           glEnable(GL_LIGHT7);
           glEnable(GL_LIGHTING);


    Si quelqu un comprends quelque chose aux lumieres en OpenGL...
    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2007 à 21:07:59

      glDisable(LA_LUMIERE_QUE_TU_VEUX_ETEINDRE);


      et tu peux utiliser la forme :

      int num = 2;
      glDisable(GL_LIGHT0 + num); /* desactive la lumiere 2 (GL_LIGHT2) */


      Pis t'es pas obligé de spécifier tous les paramètres (emmissive, etc...), y'en a des par defaut qui te conviendront peut-être.

      Dernier détail : la position des lumières est modifiée par la matrice GL_MODELVIEW, comme les sommets. (logique)
      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2007 à 21:32:29

        Merci mais mon probleme et d'allumer toutes les lumieres.... pas de les eteindre. J'ai une lumiere allumée je voudrais que lles le soient toutes.....
        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2007 à 23:19:28

          getPosition() renvoie bien un pointeur sur 4 flottants ? (et le quatrième doit être égal à 1)
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2007 à 11:25:51

            Tu pourrais pas nous montrer un code source un peu plus complet ? (et commence avec deux lumières pour alléger le code parce que là... en plus tu l'as indenté très moyennement =/)
            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2007 à 12:40:50

              Voila un cose source simple avec deux lampes et seule celle de gauche (GL_LIGHTO) s'allume.
              Apres pour le code plus complet, c'est tout un jeu je peux pas tout mettre, mais la g une sphere avec un materiau qui renvoie la lumiere emissive et opn constate qu elle ne renvoie que la lumiere de la lampe de gauche. :colere2:
              float sourceE[4]={1,1,1,1};
               float pos0[4]= {-8,4,0,1};   
               float pos1[4]= {8,4,0,1};
               glLightfv(GL_LIGHT0,GL_POSITION,pos1);
               glLightfv(GL_LIGHT1,GL_POSITION,pos2);
               glLightfv(GL_LIGHT0,GL_EMISSION,sourceE);
               glLightfv(GL_LIGHT1,GL_EMISSION,sourceE);
               glEnable(GL_LIGHT0);
               glEnable(GL_LIGHT1);
               glEnable(GL_LIGHTING);
              • Partager sur Facebook
              • Partager sur Twitter

              OpenGL Lumieres

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown