Multi-Lights OpenGL

Messages postés
21
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
17 décembre 2006
-
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
-
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

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

++
Messages postés
21
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
17 décembre 2006

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 !?
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
21
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
17 décembre 2006

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 !
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
26
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.