/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Septembre 2005 */ /* Ajustement du volume de visualisation */ /* pour qu'une distance de 1 dans le repere */ /* de modelisation corresponde */ /* a une distance de 1 pixel a l'ecran */ #include #include #include #include #include static int lumiere = 0; static GLfloat couleurBlanc[] = { 1.0F,1.0F,1.0F,1.0F }; static GLfloat couleurRouge[] = { 1.0F,0.0F,0.0F,1.0F }; static GLfloat couleurVert[] = { 0.0F,1.0F,0.0F,1.0F }; static GLfloat couleurBleu[] = { 0.0F,0.0F,1.0F,1.0F }; static GLfloat couleurNoir[] = { 0.0F,0.0F,0.0F,1.0F }; void init(void) { GLfloat mat_shininess[] = { 50.0F }; GLfloat light0_position[] = { 1.0F,1.0F,1.0F,0.0F }; GLfloat light1_position[] = { -1.0F,1.0F,1.0F,0.0F }; GLfloat light2_position[] = { 1.0F,-1.0F,1.0F,0.0F }; glMaterialfv(GL_FRONT,GL_SPECULAR,couleurBlanc); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_DIFFUSE,couleurRouge); glLightfv(GL_LIGHT1,GL_DIFFUSE,couleurVert); glLightfv(GL_LIGHT2,GL_DIFFUSE,couleurBleu); glLightfv(GL_LIGHT0,GL_POSITION,light0_position); glLightfv(GL_LIGHT1,GL_POSITION,light1_position); glLightfv(GL_LIGHT2,GL_POSITION,light2_position); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHT2); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_AUTO_NORMAL); glClearColor(0.0F,0.0F,0.0F,1.0F); } void scene(void) { glPushMatrix(); glPushMatrix(); glTranslatef(10,10,0.0F); glutSolidSphere(10.0,60,60); glPopMatrix(); glPushMatrix(); glTranslatef(290,290,0.0F); glutSolidSphere(10.0,60,60); glPopMatrix(); glPushMatrix(); glTranslatef(10,290,0.0F); glutSolidSphere(10.0,60,60); glPopMatrix(); glPushMatrix(); glTranslatef(290,10,0.0F); glutSolidSphere(10.0,60,60); glPopMatrix(); glPushMatrix(); glTranslatef(150,150,0.0F); glutSolidSphere(10.0,60,60); glPopMatrix(); glPopMatrix(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_LIGHTING); glPushMatrix(); scene(); glPopMatrix(); glFlush(); int error = glGetError(); if ( error != GL_NO_ERROR ) printf("\nAttention erreur %d\n",error); glutSwapBuffers(); } void reshape(int w,int l) { glViewport(0,0,w,l); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,w,l,0,-100.0F,100.0F); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); glutInitWindowSize(300,300); glutInitWindowPosition(50,50); glutCreateWindow("Exemple"); init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMainLoop(); return(0); }