/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Juin 2001 */ /* Examen de TD 2000-2001 : Question 1 */ /* Modelisation a base de facettes carrees */ #include #include #include #include #include #include "ModuleReshape.h" #include "ModuleManipulateur.h" #include "ModuleMenus.h" /* ************************************************** */ /* -------------------------------------------------- */ /* La fonction myinit initialise les fonctionnalites */ /* suivantes : */ /* - une gestion des parties cachees */ /* - normalisation des normales specifiees */ /* -------------------------------------------------- */ void myinit(void) { glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE) ; } /* -------------------------------------------------- */ /* Dessin d'une facette de cote 1 */ /* -------------------------------------------------- */ void facette(void) { glBegin(GL_QUADS); glNormal3f(0.0F,0.0F,1.0F); glVertex2f(0.0F,0.0F); glVertex2f(1.0F,0.0F); glVertex2f(1.0F,1.0F); glVertex2f(0.0F,1.0F); glEnd(); } /* -------------------------------------------------- */ /* Dessin d'un damier de facettes de cote 1 */ /* -------------------------------------------------- */ void scene(int n) { glPushMatrix(); float dp =(float) -n/2; for ( int i = 0 ; i < n ; i++ ) for ( int j = 0 ; j < n ; j++ ) { glPushMatrix(); glTranslatef(dp+i,dp+j,0.0F); facette(); glPopMatrix(); } glPopMatrix(); } /* -------------------------------------------------- */ /* La fonction display affiche une surface de 40x40 */ /* facettes sous un spot en position (0,0,100) */ /* oriente en (0,0,-1) et 5° d'ouverture */ /* -------------------------------------------------- */ void display(void) { glClearColor(0.3F,0.3F,0.3F,0.0F); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLfloat spot_diffuse[] = { 1.0F,0.0F,0.0F,1.0F }; GLfloat spot_specular[] = { 1.0F,0.0F,0.0F,1.0F }; GLfloat spot_position[] = { 0.0F,0.0F,100.0F,1.0F }; GLfloat spot_direction[] = { 0.0F,0.0F,-1.0F }; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glPushMatrix(); manipulateurSouris(); manipulateurClavier(); glLightfv(GL_LIGHT0,GL_DIFFUSE,spot_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,spot_specular); glLightfv(GL_LIGHT0,GL_POSITION,spot_position); glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spot_direction); glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,5.0F); scene(45); glPopMatrix(); glFlush(); glutSwapBuffers(); } /* -------------------------------------------------- */ void main(void) { glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowPosition(10,10); glutInitWindowSize(300,300); glutCreateWindow("Exercice 1 : Modelisation par facettes carrees"); myinit(); creationMenuBasique(); setParametresOrthoBasique(-25.0,25.0,-25.0,25.0,-500.0,500.0); setManipulateurDistance(1.0F); glutReshapeFunc(reshapeOrthoBasique); glutKeyboardFunc(keyBasique); glutSpecialFunc(specialBasique); glutMotionFunc(motionBasique); glutMouseFunc(sourisBasique); glutDisplayFunc(display); glutMainLoop(); } /* ************************************************** */