L'exécutable
- Espace pour switcher entre les trois modes:
- Algo du peintre objet 1 puis 2
- Algo du peintre objet 2 puis 1
- Z-Buffer

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);
}
RETOUR