Multi-Lights OpenGL

manolobis Messages postés 21 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 17 décembre 2006 - 13 sept. 2006 à 19:35
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 - 14 sept. 2006 à 17:01
Bonjour,

J'ai un problèmes de lumières sous OpenGL:

J'ai créé une structure de 8 lumières dans mon application mais seule la 1ère lumière éclaire la scène.

J'ai indexé les lumières comme suis:

for(id=0; id<8; id++)
{
  glEnable(GL_LIGHT0+id);
}

Toutes les 8 lumières ont les mêmes caractéristiques de couleurs, atténuations...


Seul la position change (évidement), le 4ème paramètre de la position étant à 1.0 pour toutes les lumières.


J'ai aussi vérifié qu'OpenGL sache gérer 8 lumières, pas de pb de ce côté.

Est-ce que ma méthode d'indexage est correcte, sinon quel est le pb ?

Si quelqu'un à une idée...

Merci.


 

5 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
13 sept. 2006 à 21:24
Est ce que tu as mis un n glEnable(GL_LIGHTING); avant de faire des glEnable(GL_LIGHT_...  ?

++
0
manolobis Messages postés 21 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 17 décembre 2006
13 sept. 2006 à 21:41
Oui, Laurent, j'ai bien mis un
glEnable(GL_LIGHTING);
C'est ce qui me permet d'allumer ou d'éteindre les ou plutôt la lumière GL_LIGHT0, qui elle fonctionne correctement.

Ce sont les autres lumières qui ne fonctionnent pas:
GL_LIGHT0 ok
GL_LIGHT1 à GL_LIGHT7, pas d'éclairage !

Je pensais à un pb d'index, mais il me semble avoir déjà vu sur des tutos la forme GL_LIGHT0+i, bien que la plupart des tutos ne traitent que d'une seule lumière (en général GL_LIGHT0).

Curieux, non !?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
13 sept. 2006 à 21:54
L'index est correct, suffit d'ouvrir gl.h pour s'en assurer. Mais je
vois pas trop ce qui pourrait merder. Post un peu de code voir.
0
manolobis Messages postés 21 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 17 décembre 2006
13 sept. 2006 à 23:00
Je pense aussi, Luhtor, que l'index est correct d'autant plus que je viens de consulter un site qui explique le fonctionnement d'une scène avec plusieurs sources d'éclairage:
rvirtual.free.fr/programmation/OpenGl/Eclairage.htm
et qui utilise le même système d'indexation GL_LIGHTi = GL_LIGHT0+i, c'est pas une équation digne d'Enstein !
Pour ce qui est de poster du code, il fait partie d'un moteur 3D, cela risque d'être volumineux, mais il n'a rien de sorcier.
En gros j'active ou désactive la lumière par appel à une fonction pour le
glEnable(GL_LIGHTING), glDisable(GL_LIGHTING). Ca ça fonctionne puisque la lumière '0' dans ce cas éclaire ou non la scène.
Puis j'ai une fonction qui me permet d'activer ou désactiver chaque lumière:


void DN3D_LIGLIB_LigChgFlg(int id)


{


  if(id<DN3D_LIGLIB_LIGMAX)


  { 


    DN3D_LIGLIB_Var[id].Lif = DN3D_LIGLIB_Var[id].Lif ? false:true;


    if(DN3D_LIGLIB_Var[id].Lif = =true) glEnable(GL_LIGHT0+id);
    else                                                      glDisable(GL_LIGHT0+id);
  }
}

Avec DN3D_LIGLIB_LIGMAX = 8;
Et DN3D_LIGLIB_Var[id].Lif sont les interrupteurs des lumières.

... voilà, rien d'exotique !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
14 sept. 2006 à 17:01
Il faudrait que tu vérifie les parametres sur temps lampes pour etre sur qu'il soient corrects et aussi vérifier que les glEnable(Gl_LIGHT ...) soit bien appellés au bon moment.
0
Rejoignez-nous