IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Lumière et couleurs OpenGL


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut Lumière et couleurs OpenGL
    Bonjour,
    J'utilise le lighting dans ma scène 3D de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                          	gl.glEnable(GL.GL_DEPTH_TEST); 
    		gl.glShadeModel(GL.GL_SMOOTH);
    	    gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, lightAmbient,0);
    	    gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, lightDiffuse,0);
    	    gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, lightSpecular,0);
    	    gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPosition,0);
    	    gl.glEnable (GL.GL_LIGHT0);
    	    gl.glEnable(GL.GL_LIGHTING);
    Lorsque j'active le lighting, je ne peux pas obtenir des couleurs au niveau de mes polygones. J'obtiens que du blanc grisé.
    Avez vous une explication ou un idée comment cohabiter le lighting et les couleurs?

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Tu as paramétré la couleur ambiente et diffuse de ton polygone ?
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, tab);
    Ca vient peut-être de là.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par LyX60 Voir le message
    Tu as paramétré la couleur ambiente et diffuse de ton polygone ?
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, tab);
    Ca vient peut-être de là.
    J'ai essayé de le paramétrer mais j'ai toujours le même problème. Mais comment on peut le paramétrer pour afficher les couleurs et les lumières en même temps?
    J'ai essayé aussi un glPushMatrix() and glPopMatrix() pour chaque polygone, et ça mache pas.

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 536
    Points : 5 219
    Points
    5 219
    Par défaut
    tu as une texture active ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    tu as une texture active ?
    Non, je n'ai pas une texture active.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Et en activant GL_COLOR_MATERIAL ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par LyX60 Voir le message
    Et en activant GL_COLOR_MATERIAL ?
    En activant GL_COLOR_MATERIAL, j'obtiens des couleurs mais il y a plus de lumière, et si je donne une couleur à un seul polygone, cette couleur s'applique à tous les polygones de la scène.
    J'ai essayé glpushMatrix() et glpopoMatrix() pour chaque polygone, mais j'ai toujours le même problème. Obtenir des couleurs c'est déjà pas mal, mais le probléme est qu'il s'applique à toute la scène.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 912
    Points : 220 197
    Points
    220 197
    Billets dans le blog
    126
    Par défaut
    Bonjour,

    Pour donner de la couleur à un objet en OpenGL, objet soumis à la lumière, il faut lui assigner un material. Ainsi OpenGL calculera la couleur de l'objet en fonction de la lumière reçue et du material. Avec le material on peut aussi assigner la brillance, et la reflection :p

    ( C'est pour ça qu'en OpenGL, on parle souvent de lumière avec les materials )

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    J'avais totalement zappé de répondre.
    Moi aussi au début j'avais du mal avec les matériaux et la lumière, mais j'ai trouvé un site pas trop mal qui explique bien.

    http://www-evasion.imag.fr/Membres/A...l/opengl4.html

    Lis ce chapitre, et le suivant. Tu auras tout le nécessaire pour faire ce que tu veux faire.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Merci pour l'information.
    Mais le problème est que si on active le lighting, on a plus de couleurs que le blanc grisé. Et si on active le coloriage, on a plus des effets de lumière ce qui rend l'intersection entre les surface invisible.
    Ma question: est ce qu'on peut avoir des surfaces coloriées avec des effets de lumières? Tous les exemples de lighting que j'ai vu sur Internet utilisent le blanc qui devient grisé en ajoutant des effets de lumière.

  11. #11
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 536
    Points : 5 219
    Points
    5 219
    Par défaut
    tu n'aurais pas de problème avec tes normales ?
    tu as bien des normales de définies ?
    as-tu vérifié qu'elles étaient valides et normalisées ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    tu n'aurais pas de problème avec tes normales ?
    tu as bien des normales de définies ?
    as-tu vérifié qu'elles étaient valides et normalisées ?
    Oui j'utilise des normales pour le lighting, mais je sais pas comment vérifier si elles sont valides ou non? J'ai des effets de lumière dans mon modèle, donc je crois que c'est valide?????

  13. #13
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Tu pourrais donner le code minimal pour pouvoir regarder ça de plus près ?
    Mais sinon, moi j'ai voulu éclairer une sphère rouge, j'ai utilisé:
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, tab);
    ou tab = {1.f, 0.f, 0.f, 1.f};
    Il faut également régler la couleur diffuse.

    Je vois pas d'où peut venir ton problème si ça ne marche pas o_O

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Voilà la méthode init():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    public void init(GLAutoDrawable d) 
    	    	{
    	    		this.setSize(new Dimension(900,550));
    	            d.setGL(new DebugGL(d.getGL()));
    	    		gl = d.getGL();
     
    	    		//gl.glLoadIdentity();
     
    	    		camera=new Camera(0,20,20,//Position
    	                    0,0,0,  // Target
    	                    0,0,1);//up vector
     
     
    	    		/*glu.gluLookAt(20,20,20,//Position
    	                           0,0,0,  // Target
    	                           0,0,1);//Up vector*/		
     
     
     
    	    		gl.glClearColor(0.17f, 0.65f, 0.92f, 0.0f);// Blue Sky Clor for the backGround (Sky)
    	    		//gl.glLoadIdentity();
    	    		model3D.setGL(gl);
    	    		model3D.setGLU(glu);
    	    		model3D.setCamera(camera);
     
    	    		model3D.loadAllPolygonsAndPoints();
     
    	    		//gl.glMatrixMode( GL.GL_MODELVIEW );
     
    	    		light.setLightAmbiant(1,1,1,1);
    	    		light.setLightDiffuse(0.8f, 0.8f, 0.8f, 1.0f);
    	    		light.setLightSpecular(1.0f, 1.0f, 1.0f, 1.0f);
    	    		light.setLightPosition(camera.getCameraPosX()+20,camera.getCameraPosY(),camera.getCameraPosZ()+10,0);
    	    		light.initLight(gl);
     
     
    	    		gl.glEnable(GL.GL_TEXTURE_2D);
    	    		gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST); 
    	    		gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); 
     
     
    	    	    gl.glDepthFunc(GL.GL_LESS);
    	    	    gl.glEnable(GL.GL_DEPTH_TEST);
    	    	    gl.glShadeModel(GL.GL_FLAT);
    	    	    gl.glDepthRange(0.0, 1.0); /* The default z mapping */
     
    	    		d.addMouseListener(this); 
    	            d.addMouseMotionListener(this); 
    	            d.addMouseWheelListener(this); 
    	            d.addKeyListener(this); 
    	    		this.addMouseListener(this);
    	    		this.addMouseMotionListener(this);
    	    		this.addMouseWheelListener(this);
    	    		this.requestFocus();
     
    //	     The scene animator 
    	    		anim = new FPSAnimator(d,fps);
    	    		anim.start();		
     
    	        }
    Et la méthode display()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public void display(GLAutoDrawable d ) 
    	    	{ 
     
    	    		//if( angle > 180.0 ) angle -= 360.0;
     
    	    		// Draw the frame
    	    		GL gl = d.getGL();
     
    	    		gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
     
    	    		if(Mode==gl.GL_RENDER)
    	    		{
    	    		  gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    	    	      model3D.drawMy3DModelFromVectors(gl,angleX,angleZ,camera,mouseX, mouseY, viewport, ratio);
    	    		}
    	    		else
    	    		{
    	    		  model3D.PickMy3DModelFromVectors(gl,glu, angleX, angleZ, camera, pickMouseX, pickMouseY, viewport, ratio, Mode, name);	
     
    	    		  gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
     
                      gl.glPushMatrix();
    	    		  model3D.drawMy3DModelFromVectors(gl,angleX,angleZ,camera,mouseX, mouseY, viewport, ratio);
    	    		  gl.glPopMatrix();
     
    	    		  gl.glPushMatrix();
     
    	    		  gl.glEnable(GL.GL_COLOR_MATERIAL );
    	    		  //light.initLight(gl);
    	    		  model3D.drawSelectedPolygon(gl,angleX,angleZ,camera);
    	    		  gl.glPopMatrix();
     
    	    		}
    	    		  keyboardControl();  
    	    		  GetOGLPos(mouseX,mouseY,CoordinatesTextField );
    	    	}

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Selon la FAQ d'opengl http://www.opengl.org/resources/faq/...cal/lights.htm, le lighting ne marche pas avec les couleurs définies par glColor().
    Lighting does not work with the current color as set by glColor*(). It works with material colors. Set the material colors with glMaterial*(). Material colors can be made to track the current color with the color material feature. To use color material, call glEnable(GL_COLOR_MATERIAL). By default, this causes ambient and diffuse material colors to track the current color. You can specify which material color tracks the current color with a call to glColorMaterial().
    Alors comment définir une couleur pour une surface (couleur rouge par exemple) en utilisant glMaterial()?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Ouuuuuuf, enfin résolu grace à vos réponses!!!!!!!!!
    J'ai changer la métode init() comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    float mat_specular[] =
    	    	    { 1.0f, 1.0f, 1.0f, 1.0f };
    	    	    float light_position[] =
    	    	    { 1.0f, 1.0f, 1.0f, 0.0f };
    	    	    float diffuseMaterial[] =
    	    	    { 0.5f, 0.5f, 0.5f, 1.0f };
     
    	    	    gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, diffuseMaterial, 0);
    	    	    gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, mat_specular, 0);
    	    	    gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, 25.0f);
    	    	    gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_position, 0);
     
    	    	    gl.glEnable(GL.GL_LIGHTING);
    	    	    gl.glEnable(GL.GL_LIGHT0);
    	    	    gl.glDepthFunc(GL.GL_LESS);
    	    	    gl.glEnable(GL.GL_DEPTH_TEST);
     
    	    	    gl.glColorMaterial(GL.GL_FRONT, GL.GL_DIFFUSE);
    	    	    gl.glEnable(GL.GL_COLOR_MATERIAL);
     
    	    		d.addMouseListener(this); 
    	            d.addMouseMotionListener(this); 
    	            d.addMouseWheelListener(this); 
    	            d.addKeyListener(this); 
    	    		this.addMouseListener(this);
    	    		this.addMouseMotionListener(this);
    	    		this.addMouseWheelListener(this);
    	    		this.requestFocus();
     
    //	     The scene animator 
    	    		anim = new FPSAnimator(d,fps);
    	    		anim.start();
    Merci à tous ceux qui m'ont aidé à résoudre ce problème.

  17. #17
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Lorsque tu dessines ton objet, juste avant tu fais:

    float matAmb[4] = {1.f, 0.f, 0.f, 1.f};
    float matDiff[4] = {1.f, 0.f, 0.f, 1.f};
    float matSpec[4] = {1.f, 1.f, 1.f, 1.f};
    float matShin[1] = {100.f};

    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmb);
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiff);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matSpec);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, matShin);

    Mais il faut désactiver GL_COLOR_MATERIAL. Apparament quand tu actives GL_COLOR_MATERIAL faut utiliser glColor. Si tu l'active ça rend inutilisable glMaterial.

    Ensuite n'oublie pas de régler la couleur de ta lumière (diff et amb).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème lumières et ombres opengl
    Par ludo6577 dans le forum OpenGL
    Réponses: 12
    Dernier message: 18/03/2011, 17h47
  2. Modifier la lumière,contraste ,couleur
    Par Montor dans le forum Contribuez
    Réponses: 4
    Dernier message: 16/04/2010, 00h33
  3. lib3DS couleurs opengl
    Par g0ku_0ne dans le forum OpenGL
    Réponses: 7
    Dernier message: 23/03/2009, 00h57
  4. Réponses: 7
    Dernier message: 27/08/2004, 15h25
  5. OPENGL Couleurs Fullscreen
    Par Boublou dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/09/2002, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo