[openGL] couleur ne dépedant pas des lumieres

couleur ne dépedant pas des lumieres [openGL] - C++ - Programmation

Marsh Posté le 19-04-2006 à 14:48:49    

Salut !

 

Comment faire, en openGL, pour donner une couleur à un objet qui ne dépende pas de l'éclairage ?
En fait, j'ai un controle affiché au premier plan, mais sa couleur chage quand je bouge dans la scene, a cause des lumiere présentes..
Ce que j'ai fait c'est de lui mettre une couleur en GL_EMISSION, mais je pense qu'il y a une autre methode plus propre...

 


Merci !

Reply

Marsh Posté le 19-04-2006 à 14:48:49   

Reply

Marsh Posté le 19-04-2006 à 15:22:11    

Plus propre ? mais ... c'est propre, non :) ?  
GL_EMISSION est fait pour ca non ?
 
GL_EMISSION à la couleur que tu veux
GL_DIFFUSE, GL_AMBIANT etc à zéro :/


---------------
tutos de programmation 3D :
Reply

Marsh Posté le 19-04-2006 à 15:27:03    

Ouai, le truc c'est que je suis obligé de remettre le GL_EMISSION à sa valeur par défaut apres... sinon tous les objets émettent et c'est pas vraiment beau ca !!
c'est pour ca que je trouvais que ca faisait un peu bidouille...
 
 

Reply

Marsh Posté le 19-04-2006 à 18:35:43    

Dans ce cas, tu crée une classe toute propre...
 
class glOperation
{
__glOperation();
__~glOperation();
__void setDiffuse();
__void setSpecular();
__void drawPolygon(ptr);
 ou que sais-je encore..
}
 
qui dans le destructeur ~glOperations() remet openGL à ses valeurs par défaut.... c'est ce que je fais dans mon moteur3D...
 
dans ton code, ca donera donc :
 
glOperations op;
op.setSpecular( valeurs ... );
for ...............
__op.drawPolygon();
 
et dès que tu sortiras de ton bloc d'instruction, ou fonction, la classe sera supprimée, et les paramètres d'openGL reviendront tous comme ils étaient en entrant (si ta classe est bien codée)
 
En utilisant cette methode, tu évites facilement qu'une portion de code influence les autres....
 
Si tu utilises cette methode, je te conseilles de jeter un coup d'oeuil sur
glIsEnabled( GLenum );
 
^^ ensuite tu stockes ttes les variables d'ogl ds ta classe, et tu les rétablis à la destruction de la classe.
ex :
 
bool tex2d = glIsEnabled( GL_TEXTURE_2D );
 
// code......;
 
if( tex2d )
 glEnable(GL_TEXTURE_2D);
else
 glDisable(GL_TEXTURE_2D);


---------------
tutos de programmation 3D :
Reply

Marsh Posté le 19-04-2006 à 18:50:58    

Yess !! merci beaucoup !! C'est une super idée !!

Reply

Marsh Posté le 19-04-2006 à 19:25:31    

you re welcome


---------------
tutos de programmation 3D :
Reply

Marsh Posté le 19-04-2006 à 22:47:52    

tu peux faire un glDisable(GL_LIGHTING) avant de dessiner ton objet puis un glEnable(GL_LIGHTING) après.
Ca devrait marcher.

Reply

Marsh Posté le 19-04-2006 à 23:15:47    

Si tes faces n'ont pas de texture, tu associe à chaques vertices une couleur (~diffuse) lors de la création de ta face. Pas necessaire de changer les propriétées du materiaux.
 
 
glBegin(GL_TRIANGLES);
glColor4f(0,0,1,1); (r,g,b,alpha)
glVertex3f(x,y,z);
 
 
etc

Reply

Marsh Posté le 19-04-2006 à 23:33:56    

pour flipz137, ta solution marche pas si la couleur diffuse est pas le blanc, car les composantes des lumières dues au lighting viendront s'ajouter à la couleur diffuse.
 
pour squiZZ, wep, ca, ca devrait marcher, j'y avais pas pensé ^^ bienvu


Message édité par icareo le 19-04-2006 à 23:38:48

---------------
tutos de programmation 3D :
Reply

Marsh Posté le 22-04-2006 à 19:06:12    

Salut en faite j'ai une question :
 
Je suis new dans le c++ j'ai essayer de faire un Gl mais comment fais ton pour supprimer le bouton " fermer " sur la fenetre et qand le clike droit aussi !! Quelqun peut m'aider

Reply

Marsh Posté le 22-04-2006 à 19:06:12   

Reply

Marsh Posté le 22-04-2006 à 21:21:05    

Le bouton "fermer"... tu veux dire celui de la fenetre windows ? je ne vois pas le rapport avec openGL.
 
Si tu veux des réponses, expliques toi bien, et surtout, crée un nouveau sujet avec un titre explicite du genre "windows.h - 'empecher' fermeture fenetre" ;)


---------------
tutos de programmation 3D :
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed