| 
           | 
           | 
           | 
| 
          Sans Z-Buffer | 
          Sans Z-Buffer | 
          Avec Z-Buffer | 
/* Auteur: Nicolas JANEY         */
    /* nicolas.janey@univ-fcomte.fr  */
    /* Avril 2001                    */
    /* Illustration du Z-Buffer      */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <GL/glut.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    
    #include "ModuleCouleurs.h"
    #include "ModuleManipulateur.h"
    #include "ModuleMenus.h"
    #include "ModuleReshape.h"
    
    static int mode = 0 ;
    
    void objet1() {
      glColor4fv(couleurRose()) ;
      glVertex3f(-5.0F,6.0F,-3.0F) ;
      glVertex3f(6.0F,4.0F,4.0F) ;
      glVertex3f(-2.0F,-6.0F,6.0F) ;
    }
    
    void objet2() {
      glColor4fv(couleurVert()) ;
      glVertex3f(0.0F,3.0F,4.0F) ;
      glVertex3f(3.0F,-6.0F,-1.0F) ;
      glVertex3f(-5.0F,-4.0F,2.0F) ;
    }
    
    void display(void) {
      glClearColor(1.0,1.0,1.0,1.0);
      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
      glPushMatrix();
      manipulateurSouris();
      manipulateurClavier();
      if ( mode/2 == 1 )
        glEnable(GL_DEPTH_TEST) ;
        else
      glDisable(GL_DEPTH_TEST) ;
      glBegin(GL_TRIANGLES) ;
      if ( mode%2 == 0 ) {
        objet1() ;
        objet2() ; }
        else {
        objet2() ;
        objet1() ; }
      glEnd() ;
      glPopMatrix();
      glFlush();
      glutSwapBuffers();
    }
    
    void myinit(void) {
      glShadeModel(GL_SMOOTH);
      glEnable(GL_AUTO_NORMAL);
      glEnable(GL_NORMALIZE);
    }
    
    void key(unsigned char key,int x,int y) {
      if ( keyManipulateur(key,x,y) )
        glutPostRedisplay();
        else
        switch ( key ) {
          case ' '  : mode = (mode+1)%4;
                      glutPostRedisplay();
                      break; }
    }
    
    int main(int argc,char **argv) {
      glutInit(&argc,argv);
      glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE);
      glutInitWindowSize(150,150); 
      glutInitWindowPosition(50,50); 
      glutCreateWindow("ZBuffer"); 
      myinit(); 
      creationMenuBasique();
      setParametresOrthoBasique(-8.0,8.0,-8.0,8.0,-500.0,500.0);
      setManipulateurDistance(1.0F);
      glutReshapeFunc(reshapeOrthoBasique);
      glutKeyboardFunc(key);
      glutSpecialFunc(specialBasique);
      glutMotionFunc(motionBasique);
      glutMouseFunc(sourisBasique);
      glutDisplayFunc(display);
      glutMainLoop();
      return(0);
    }