#include // pour MacOSX #include // pour MacOSX #include // pour MacOSX // #include // pour PC /* Compilation sur MacOSX : gcc -framework OpenGL -framework GLUT -framework Cocoa -o cube3D cube3D.c Compilation sur PC : gcc cube3D.c -o cube3D -L/usr/X11R6/include/GL -L/usr/X11R6/lib -lGL -lGLU -lglut -lm -lX11 22/04/04 - Didier STRAUS - Info. graphique - Cube 3D en OpenGL Cliquer avec votre souris et deplacez la souris en gardant le bouton enfonce pour faire tourner le cube 3D. http://www.Software-DS.com */ typedef struct { float x; float y; float z; float r; float g; float b; } point; /* variables globales */ point p[8]={ {-0.5,-0.5,0.5,1,0,0}, {-0.5,0.5,0.5,0,1,0}, {0.5,0.5,0.5,0,0,1}, {0.5,-0.5,0.5,1,1,1}, {-0.5,-0.5,-0.5,1,0,0}, {-0.5,0.5,-0.5,0,1,0}, {0.5,0.5,-0.5,0,0,1}, {0.5,-0.5,-0.5,1,1,1} }; int f[6][4]={ {0,1,2,3}, {3,2,6,7}, {4,5,6,7}, {0,1,5,4}, {1,5,6,2}, {0,4,7,3} }; char presse; int anglex,angley,x,y,xold,yold; /* Prototyps */ void affichage(); void clavier(unsigned char touche,int x,int y); void reshape(int x,int y); void mouse(int bouton,int etat,int x,int y); void mousemotion(int x,int y); /* *************************************************** */ /* main */ int main(int argc,char **argv) { /* initilisation de glut et creation de la fenetre */ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(200,200); glutInitWindowSize(500,500); glutCreateWindow("Cube 3D"); /* initialisation OpenGL */ glClearColor(0,0,0,0); glColor3f(1,1,1); glPointSize(2); glEnable(GL_DEPTH_TEST); /* enregistrement des fonctions de rappel */ glutDisplayFunc(affichage); glutKeyboardFunc(clavier); glutReshapeFunc(reshape); // glutIdleFunc(idle); glutMouseFunc(mouse); glutMotionFunc(mousemotion); /* Entree dans la boucle principale */ glutMainLoop(); return 0; } /* *************************************************** */ void affichage() { int i,j; /* effacement de l'image avec la couleur de fond */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(-angley,1,0,0); glRotatef(-anglex,0,1,0); /* Dessin du cube */ for(i=0;i<6;i++) { glBegin(GL_POLYGON); for(j=0;j<4;j++) { glColor3f(p[f[i][j]].r,p[f[i][j]].g,p[f[i][j]].b); glVertex3f(p[f[i][j]].x,p[f[i][j]].y,p[f[i][j]].z); } glEnd(); } glFlush(); /* On echange les buffers */ glutSwapBuffers(); } /* affichage */ /* *************************************************** */ void clavier(unsigned char touche,int x,int y) { switch(touche) { case 'p': /* affichage carre plein */ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glutPostRedisplay(); break; case 'f': glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glutPostRedisplay(); break; case 's': glPolygonMode(GL_FRONT_AND_BACK,GL_POINT); glutPostRedisplay(); break; case 'd': glEnable(GL_DEPTH_TEST); glutPostRedisplay(); break; case 'D': glDisable(GL_DEPTH_TEST); glutPostRedisplay(); break; case 'q': /* la touche 'q' permet de quitter le programme */ exit(0); } /* switch */ } /* clavier */ /* *************************************************** */ void reshape(int x,int y) { if (x