/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Avril 2001 */ /* Une sphere blanche speculaire illuminee */ /* par des lumieres colorees en OpenGL */ #include #include #include #include "ModuleCouleurs.h" #include "ModuleManipulateur.h" #include "ModuleMenus.h" #include "ModuleReshape.h" #include "ModuleFont.h" static GLfloat shininess = 100.0F ; static int mode = 0; void myinit(void) { GLfloat l_pos0[] = { 1.0F,1.0F,1.0F,0.0F }; GLfloat l_pos1[] = { -1.0F,0.0F,1.0F,0.0F }; glClearColor(0.5F,0.5F,1.0F,1.0F) ; glMaterialfv(GL_FRONT,GL_SPECULAR,couleurBlanc()); glLightfv(GL_LIGHT0,GL_DIFFUSE,couleurGrisMoyen()); glLightfv(GL_LIGHT0,GL_POSITION,l_pos0); glLightfv(GL_LIGHT1,GL_DIFFUSE,couleurGrisMoyen()); glLightfv(GL_LIGHT1,GL_POSITION,l_pos1); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glDepthFunc(GL_LESS); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); } void display(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glPushMatrix(); manipulateurSouris(); manipulateurClavier(); switch ( mode ) { case 0 : glLightfv(GL_LIGHT0,GL_SPECULAR,couleurNoir()); glLightfv(GL_LIGHT1,GL_SPECULAR,couleurNoir()); break; case 1 : glLightfv(GL_LIGHT0,GL_SPECULAR,couleurGrisClair()); glLightfv(GL_LIGHT1,GL_SPECULAR,couleurGrisClair()); break; case 2 : glLightfv(GL_LIGHT0,GL_SPECULAR,couleurBleu()); glLightfv(GL_LIGHT1,GL_SPECULAR,couleurVert()); break; } glMaterialf(GL_FRONT,GL_SHININESS,shininess); glutSolidSphere(1.3,100,100); glPopMatrix(); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glPushMatrix(); glColor3fv(couleurNoir()); placeFontCursor(-1.4F,-1.6F,0.0F) ; simpleBitmapOutput(REGULAR8x13,"%f",shininess) ; glPopMatrix(); glFlush(); glutSwapBuffers(); } void key(unsigned char key,int x,int y) { if ( keyManipulateur(key,x,y) ) glutPostRedisplay(); else switch ( key ) { case 's' : shininess *= 1.03F ; glutPostRedisplay(); break; case 'S' : shininess /= 1.03F ; glutPostRedisplay(); break; case 0x0D : mode = (mode+1) % 3; glutPostRedisplay(); break; } } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); glutInitWindowSize(160,190); glutInitWindowPosition(50,50); glutCreateWindow("Réflexion spéculaire"); myinit(); creationMenuBasique(); setParametresOrthoBasique(-1.5,1.5,-1.5,1.5,-50.0,50.0); setManipulateurDistance(1.0F); glutReshapeFunc(reshapeOrthoBasique); glutKeyboardFunc(key); glutSpecialFunc(specialBasique); glutMotionFunc(motionBasique); glutMouseFunc(sourisBasique); glutDisplayFunc(display); glutMainLoop(); return(0); }