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 :

[openGL] Ombrage de Gouraud


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    grmi91
    Invité(e)
    Par défaut [openGL] Ombrage de Gouraud
    Bonjour,
    Je viens de faire l'ombrage plat sur un cube et je souhaiterais faire un ombrage de Gouraud en openGL.

    code de l'ombrage plat :

    Code :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #define ESCAPE 27
     
    GLfloat light_position[] = { 1.0F,0.0F,1.0F,0.0F };
    GLfloat lightambiant[] = { 1.0f,1.0f,1.0f,0.0};
    int window; 
     
    void InitGL(int Width, int Height)	        
    {
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);		
    	glClearDepth(1.0);
    	glDepthFunc(GL_LESS);	
    	glEnable(GL_DEPTH_TEST);	
    	glEnable(GL_LIGHTING);
    	glEnable(GL_LIGHT0); 	
    	glLightfv(GL_LIGHT0,GL_POSITION,light_position);	
    	glLightfv(GL_LIGHT0,GL_AMBIENT,lightambiant);
     
     
    	/* model d'ombrage */
    	glShadeModel(GL_SMOOTH);		//GL_FLAT = ombrage plat; GL_SMOOTH = ombrage de Gouraud (degradé)
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();				
    	gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);	
    	glMatrixMode(GL_MODELVIEW);
    }
     
     
    void ReSizeGLScene(int Width, int Height)
    {
    	// ...
    }
     
    void DrawGLScene()
    {  	
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);		
      	glLoadIdentity();		
    	glLoadIdentity();
    	gluLookAt(8.0,6.0,4.0,0.0,0.0,0.0,0.0,1.0,0.0); 
     
     
                 /*************************
                 * Cube avec ombrage plat *
                 *************************/
                 //dessin cube en donner les 4 sommets et la normale des 6 faces
      	     glBegin (GL_QUADS);
    		// face 1
    		glNormal3f (0.0f,0.0f,1.0f);      
    		glVertex3i(1,1,1);                  
    		glVertex3i(1,-1,1);                  
    		glVertex3i(-1,-1,1);                 
    		glVertex3i(-1,1,1);                  
                    //face2
    		glNormal3f (0.0f,0.0f,-1.0f);     
    		glVertex3i(1,1,-1);                 
    		glVertex3i(1,-1,-1);                 
    		glVertex3i(-1,-1,-1);              
    		glVertex3i(-1,1,-1);                  
    	             // face3
    	             glNormal3f (1.0f,0.0f,0.0f);      
    		glVertex3i(1,1,1);                   
    		glVertex3i(1,-1,1);                  
    		glVertex3i(1,-1,-1);                  
    		glVertex3i(1,1,-1);                  
    	             // face4
    		glNormal3f (-1.0f,0.0f,0.0f);     
    		glVertex3i(-1,1,1);                
    		glVertex3i(-1,-1,1);                
    		glVertex3i(-1,-1,-1);               
    		glVertex3i(-1,1,-1);                  
    	   // face5
    		glNormal3f (0.0f,1.0f,0.0f);     
    		glVertex3i(-1,1,-1);                
    		glVertex3i(-1,1,1);                  
    		glVertex3i(1,1,1);                   
    		glVertex3i(1,1,-1);                  
    	   // face6
    		glNormal3f (0.0f,-1.0f,0.0f);     
    	    	glVertex3i(-1,-1,1);                 
    		glVertex3i(1,-1,1);                  
    		glVertex3i(1,-1,-1);                 
    	glEnd ();
    	glutSwapBuffers();
    }
     
    void keyPressed(unsigned char key, int x, int y) 
    {
    	// ...
    }
     
    int main(int argc, char **argv) 
    {
    	// ...
    }
    Donc si quelqu'un pouvait m'aider pour l'ombrage de Gouraud ce serait sympa.
    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Salut,

    deux problèmes dans ton code:
    1. Tu ne définis pas tous les paramètres de la lumière. La composante diffuse est importante par exemple
    2. Tu ne définis pas de "matériau" pour les vertex de ton cube. Un matériau est comme une couleur, mais est séparé en plusieurs composantes, ambiante, diffuse, speculaire, etc.... Comme les lumières donc, et ca tombe bien car c'est avec les lumières que ca s'utilise.

    Si vraiment tu ne veux pas définir de matériau, tu peux laisser opengl les calculer tout seul à partir d'une couleur (glColor3f(0,1,0) opar exemple) si tu active auparavant GL_COLOR_MATERIAL (glEnable(GL_COLOR_MATERIAL))

Discussions similaires

  1. [openGL] Ombrage de Gouraud
    Par grmi91 dans le forum Windows
    Réponses: 1
    Dernier message: 11/03/2008, 18h15
  2. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

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