/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Mars 2002 */ /* 4-Connexite et 8-Connexite */ #include #include #include #include #include #include #include "ModuleCouleurs.h" #include "ModuleMenus.h" #include "ModuleReshape.h" #include "ModuleFleche.h" struct coord2D { double x; double y; } ; struct segment { coord2D pi; coord2D pf; } ; int aff = 0; static segment seg = { { 5,3 },{ 35,16 } }; void pixel(int x,int y,float *c) { glColor4fv(c); glBegin(GL_QUADS) ; glVertex2i(x,y) ; glVertex2i(x+1,y) ; glVertex2i(x+1,y+1) ; glVertex2i(x,y+1) ; glEnd() ; glColor4fv(couleurNoir()); glBegin(GL_LINE_LOOP) ; glVertex2i(x,y) ; glVertex2i(x+1,y) ; glVertex2i(x+1,y+1) ; glVertex2i(x,y+1) ; glEnd() ; } void dessine8Connexite() { int i,j; glColor4fv(couleurBleu()) ; glBegin(GL_LINES); for ( i = 1 ; i < 7 ; i++ ) { glVertex2d(1.0,i); glVertex2d(9.0,i); } for ( i = 1 ; i < 10 ; i++ ) { glVertex2d(i,1.0); glVertex2d(i,6.0); } glEnd() ; for ( i = 3 ; i < 6 ; i++ ) for ( j = 2 ; j < 5 ; j++ ) pixel(i,j,couleurVertFonce()); pixel(4,3,couleurRouge()); glColor4fv(couleurJaune()); glPushMatrix(); glTranslatef(4.5F,3.75F,0.0F); flecheEnVolume(0.0F,1.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.5F,3.25F,0.0F); flecheEnVolume(0.0F,-1.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.25F,3.5F,0.0F); flecheEnVolume(-1.0F,0.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.75F,3.5F,0.0F); flecheEnVolume(1.0F,0.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.75F,3.75F,0.0F); flecheEnVolume(0.8F,0.8F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.25F,3.75F,0.0F); flecheEnVolume(-0.8F,0.8F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.25F,3.25F,0.0F); flecheEnVolume(-0.8F,-0.8F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.75F,3.25F,0.0F); flecheEnVolume(0.8F,-0.8F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); } void dessine4Connexite() { int i; glColor4fv(couleurBleu()) ; glBegin(GL_LINES); for ( i = 1 ; i < 7 ; i++ ) { glVertex2d(1.0,i); glVertex2d(9.0,i); } for ( i = 1 ; i < 10 ; i++ ) { glVertex2d(i,1.0); glVertex2d(i,6.0); } glEnd() ; pixel(4,3,couleurRouge()); pixel(5,3,couleurVertFonce()); pixel(3,3,couleurVertFonce()); pixel(4,2,couleurVertFonce()); pixel(4,4,couleurVertFonce()); glColor4fv(couleurJaune()); glPushMatrix(); glTranslatef(4.5F,3.75F,0.0F); flecheEnVolume(0.0F,1.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.5F,3.25F,0.0F); flecheEnVolume(0.0F,-1.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.25F,3.5F,0.0F); flecheEnVolume(-1.0F,0.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); glPushMatrix(); glTranslatef(4.75F,3.5F,0.0F); flecheEnVolume(1.0F,0.0F,0.0F,0.35F,0.6F,0.12F); glPopMatrix(); } void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); switch (aff) { case 0 : dessine4Connexite() ; break ; case 1 : dessine8Connexite() ; break ; } glPopMatrix(); glFlush(); glutSwapBuffers() ; } void key(unsigned char key,int x,int y) { switch ( key ) { case 0x1B : exit(0); break; case 0x0D : aff = (aff+1)%2; glutPostRedisplay(); break; } } void myinit() { glClearColor(0.8F,0.8F,0.8F,1.0F); } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); glutInitWindowSize(210,130); glutInitWindowPosition(50,50); glutCreateWindow("4/8 Connexité"); myinit(); creationMenuBasique(); setParametresOrthoBasique(0.35,5.85,0.75,6.25,-50.0,50.0); glutReshapeFunc(reshapeOrthoBasique); glutKeyboardFunc(key); glutDisplayFunc(display); glutMainLoop(); return(0); }