L'exécutable

ZB08.gif (4335 octets)

Le source: ZBuffer.cpp

#include <windows.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>

#include <stdio.h>
#include <stdlib.h>

static int mode = 0 ;

void objet1() {
  glColor3f(1.0F,0.7F,0.7F) ;
  glVertex3f(3.0F,14.0F,0.0F) ;
  glVertex3f(14.0F,12.0F,7.0F) ;
  glVertex3f(6.0F,2.0F,9.0F) ;
}

void objet2() {
  glColor3f(0.0F,1.0F,0.0F) ;
  glVertex3f(8.0F,11.0F,7.0F) ;
  glVertex3f(11.0F,2.0F,2.0F) ;
  glVertex3f(3.0F,4.0F,5.0F) ;
}

void CALLBACK display(void) {
  glClearColor(1.0,1.0,1.0,1.0);
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  if ( mode == 2 )
    glEnable(GL_DEPTH_TEST) ;
  glBegin(GL_TRIANGLES) ;
  if ( mode) {
    objet1() ;
    objet2() ; }
    else {
    objet2() ;
    objet1() ; }
  glEnd() ;
  glDisable(GL_DEPTH_TEST) ;
  glFlush();
  auxSwapBuffers();
}

void myinit (void) {
  glShadeModel(GL_SMOOTH);
}

void CALLBACK myReshape(int w, int h) {
  glViewport(0,0,w,h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0.0,15.0,0.0,15.0,-10.0,10.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

void CALLBACK auxSpace(void) {
  mode = (mode+1)%3 ;
}

void main(void) {
  auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA|AUX_DEPTH);
  auxInitPosition (0,0,300,300);
  auxInitWindow("ZBuffer") ;
  myinit();
  auxKeyFunc(AUX_SPACE,auxSpace) ;
  auxReshapeFunc(myReshape);
  auxMainLoop(display);
}
WB01624_.gif (281 octets) RETOUR