/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Avril 2001 */ /* Illustration d'une decomposition */ /* de l'espace en voxels pour une */ /* utilisation dans un algorithme */ /* de lancer de rayons */ #include #include #include #include #include #include "ModuleCouleurs.h" #include "ModuleManipulateur.h" #include "ModuleMenus.h" #include "ModuleReshape.h" static int aff = 0 ; void myinit(void) { GLfloat light_position0[] = { 1.0F,1.0F,1.0F,0.0F }; glLightfv(GL_LIGHT0,GL_AMBIENT,couleurNoir()); glLightfv(GL_LIGHT0,GL_DIFFUSE,couleurBlanc()); glLightfv(GL_LIGHT0,GL_SPECULAR,couleurBlanc()); glLightfv(GL_LIGHT0,GL_POSITION,light_position0); glEnable(GL_LIGHT0); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix() ; manipulateurSouris(); manipulateurClavier(); glRotatef(10.0F,1.0,0.0,0.0); glRotatef(15.0F,0.0,1.0,0.0); glRotatef(0.0F,0.0,0.0,1.0); glColor4fv(couleurBlanc()) ; glBegin(GL_LINES) ; for ( int x = -6 ; x <= 6 ; x += 4 ) for ( int y = -6 ; y <= 6 ; y += 4 ) { glVertex3i(x,y,-6) ; glVertex3i(x,y,6) ; glVertex3i(x,-6,y) ; glVertex3i(x,6,y) ; glVertex3i(-6,x,y) ; glVertex3i(6,x,y) ; } glEnd() ; glEnable(GL_LIGHTING); if ( aff == 1 ) { glPushMatrix(); glTranslatef(3.0F,2.0F,1.0F); glMaterialfv(GL_FRONT,GL_DIFFUSE,couleurRouge()) ; glRotatef(10,1.0,0.0,0.0); glRotatef(20,0.0,1.0,0.0); glRotatef(30,0.0,0.0,1.0); glutSolidSphere(1.3,30,30) ; glPopMatrix(); glPushMatrix(); glTranslatef(-3.0F,4.0F,-3.0F); glMaterialfv(GL_FRONT,GL_DIFFUSE,couleurVert()) ; glRotatef(-10,1.0,0.0,0.0); glRotatef(-20,0.0,1.0,0.0); glRotatef(60,0.0,0.0,1.0); glutSolidCube(1.0) ; glPopMatrix(); glPushMatrix(); glTranslatef(-0.0F,-4.0F,-2.0F); glMaterialfv(GL_FRONT,GL_DIFFUSE,couleurBleu()) ; glRotatef(10,1.0,0.0,0.0); glRotatef(20,0.0,1.0,0.0); glRotatef(60,0.0,0.0,1.0); glutSolidCone(1.9,2.0,30,30) ; glPopMatrix(); glPushMatrix(); glTranslatef(-2.0F,-4.0F,-4.0F); glMaterialfv(GL_FRONT,GL_DIFFUSE,couleurJaune()) ; glRotatef(10,1.0,0.0,0.0); glRotatef(20,0.0,1.0,0.0); glRotatef(60,0.0,0.0,1.0); glutSolidTorus(0.8,1.6,30,30) ; glPopMatrix(); glPushMatrix(); glTranslatef(4.0F,-1.0F,-4.0F); glMaterialfv(GL_FRONT,GL_DIFFUSE,couleurMagenta()) ; glRotatef(10,1.0,0.0,0.0); glRotatef(20,0.0,1.0,0.0); glRotatef(60,0.0,0.0,1.0); glutSolidTeapot(1.5) ; glPopMatrix(); glPushMatrix(); glTranslatef(-3.0F,3.0F,4.0F); glMaterialfv(GL_FRONT,GL_DIFFUSE,couleurCyan()) ; glRotatef(10,1.0,0.0,0.0); glRotatef(60,0.0,1.0,0.0); glRotatef(60,0.0,0.0,1.0); glutSolidCone(0.8,2.5,30,30) ; glPopMatrix(); } glDisable(GL_LIGHTING); glPopMatrix() ; glFlush(); glutSwapBuffers() ; } void key(unsigned char key,int x,int y) { if ( keyManipulateur(key,x,y) ) glutPostRedisplay(); else switch ( key ) { case 0x0D : aff = 1-aff ; glutPostRedisplay(); break ; } } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); glutInitWindowSize(300,300); glutInitWindowPosition(50,50); glutCreateWindow("Décomposition en voxels"); myinit(); creationMenuBasique(); setParametresOrthoBasique(-11.0,11.0,-11.0,11.0,-50.0,50.0); setManipulateurDistance(1.0F); glutReshapeFunc(reshapeOrthoBasique); glutKeyboardFunc(key); glutSpecialFunc(specialBasique); glutMotionFunc(motionBasique); glutMouseFunc(sourisBasique); glutDisplayFunc(display); glutMainLoop(); return(0); }