Achats/Ventes : SnoOzeR Divers : zakamaster et 14 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

glMaterial();

 
n°26995
Freeed
Posté le 23-08-2005 à 21:07:43  profilanswer
 

Bonsoir à tous  :hello:  
 
Voilà j'ai commencé à programmer un peu en OpenGL et je suis arrivé au chapitre des lumières  :)  
 
Seulement, j'ai un problème :
 
J'ai essayé d'utiliser la fonction glMaterial[if]() mais je ne vois aucune modification.
 
Voici mon code (je donne que la partie nécessaire) :
 

Code :
  1. void InitGL()
  2. {
  3.      glEnable(GL_DEPTH_TEST);
  4.      //glEnable(GL_COLOR_MATERIAL);
  5.      glEnable(GL_LIGHTING);
  6.      glEnable(GL_LIGHT0);
  7.      glShadeModel(GL_SMOOTH);
  8. }
  9. void Draw()
  10. {
  11.      glClear (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
  12.      glMatrixMode(GL_MODELVIEW);
  13.      glLoadIdentity();
  14.    
  15.      glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 100);
  16.    
  17.      /* Ici les objets comme un cube par ex */
  18.      SwapBuffers(DC);
  19. }


 
J'ai essayé avec et sans désactiver GL_COLOR_MATERIAL, et en mettant SHININESS sur 0 (pour voir la différence) mais rien n'y fait :(.
 
Est-ce que quelqu'un pourrait me dire d'ou vient mon erreur ?  
 
Merci  :jap:

n°26996
Ashe
reenignE esreveR
Posté le 23-08-2005 à 21:12:56  profilanswer
 

Tu devrais ptet positionner la lumiere 0
Et le glEnable faut un glColorMaterial avec pour dire quelle face et quel material est associe a la couleur diffuse


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°26997
Ashe
reenignE esreveR
Posté le 23-08-2005 à 21:13:51  profilanswer
 

glMaterial
glColorMaterial
Tant qu'a faire


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°26998
Freeed
Posté le 23-08-2005 à 21:18:49  profilanswer
 

En fait c'est pcq j'ai lu dans un tuto que si GL_COLOR_MATERIAL etait désactivé, c'était glMaterial qui s'occupait de la couleur, sinon c'était glColor qui gérait ça sauf pour les autres propriétés.
Est-ce que tu pourrais me dire quelles fonctions utiliser ?
 
Merci ;)
 
Edit : et aussi me dire si j'ai placé mes fonctions au bon endroit svp :)


Message édité par Freeed le 23-08-2005 à 21:20:25
n°26999
Freeed
Posté le 23-08-2005 à 21:25:08  profilanswer
 

Bon j'ai qd meme réessayé ce que tu m'as dit, et ca a l'air de fonctionner  :whistle:  
 
Donc mon code final :
 

Code :
  1. void Draw()
  2. {
  3.      glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
  4.      glMatrixMode(GL_MODELVIEW);
  5.      glLoadIdentity();
  6.    
  7.      glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
  8.      glColor3d(1,1,1);
  9.      glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128);
  10.    
  11.      gluLookAt(5,5,5,1,1,1,0,1,0);
  12.    
  13.      glutSolidSphere(1,50,50);
  14.    
  15.      SwapBuffers(DC);
  16. }


 
C'est juste comme ca ?

n°27001
Ashe
reenignE esreveR
Posté le 23-08-2005 à 21:51:35  profilanswer
 

glColorMaterial affecte l'etat, donc y en a besoin qu'une fois (genre dans ta fonction init), pareil pour le glMatrixMode vu que tu changes jamais de mode, pareil pour le glMateriali du GL_SHININESS et euh.. le glColor3d aussi... wala
Sinon juste GL_FRONT au lieu de GL_FRONT_AND_BACK, a moins que t'affiches l'arriere des primitives [:spamafote]


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°27003
Freeed
Posté le 23-08-2005 à 22:24:31  profilanswer
 

Ouep merci pour ces conseils  ;)  
Enfin la j'essaie d'apprendre les bases, alors bon je fais des tests dans Draw().
Donc qd j'ai qqchose qui doit se lancer automatiquement à la création de la fenêtre je fourre ca dans InitGL()
 
Encore merci  :jap:  ;)  :love:

n°27005
Ashe
reenignE esreveR
Posté le 23-08-2005 à 22:30:42  profilanswer
 

Bah en fait la plupart des fonctions d'OpenGL modifient un etat (genre "la matrice 'courante'", "la couleur 'courante'", etc)
Du coup quand tu affiches un truc, tu fais pas
glColorXX( rouge );
glVertexXX( ... );
glColorXX( rouge );
glVertexXX( ... );
glColorXX( rouge );
glVertexXX( ... );
Mais juste
glColorXX( rouge );
glVertexXX( ... );
glVertexXX( ... );
glVertexXX( ... );
 
Parce que glColorXX modifie la couleur courante qui sera appliquee tt le temps
Ben pareil pour glMatrixMode et les autres
D'ailleurs y a pas grand chose comme fonctions autres que celles qui modifient l'etat, a part glBegin/glEnd (qui sert a rien) et glVertex... (qui sert a rien non plus) et glDrawElements/etc (qui servent)
Mais pour faire simple, plus tu changes les etats, moins vite ca s'affiche :p


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe

Aller à :
Ajouter une réponse