/* Un programme OpenGL gerant l'affichage */ /* en projection orthographique de maniere que */ /* les coodonnees de modelisation correspondent */ /* a des coordonnees ecran comptees en pixels */ /* avec l'origine au centre de la fenetre, */ /* l'axe des x oriente vers la droite et */ /* l'axe des y vers le haut de la fenetre */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Novembre 2009 */ #include #include #include #include #include static int scn = 1; /* Scene dessinee */ void scene(void) { glPushMatrix(); glBegin(GL_LINES); glColor3f(1.0F,0.0F,0.0F); if ( scn ) for ( int i = -159 ; i < 160 ; i += 2 ) { glVertex2i(i,-120); glVertex2i(i,120); } else for ( int i = -120 ; i < 120 ; i += 2 ) { glVertex2i(-160,i); glVertex2i(160,i); } glEnd(); glPopMatrix(); } /* Fonction executee lors d'un rafraichissement */ /* de la fenetre de dessin */ void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); scene(); glPopMatrix(); glFlush(); glutSwapBuffers(); } /* Fonction executee lors d'un changement */ /* de la taille de la fenetre OpenGL */ void reshape(int x,int y) { glViewport(0,0,x,y); glMatrixMode(GL_PROJECTION) ; glLoadIdentity() ; glOrtho(-x/2,-x/2+x,-y/2,-y/2+y,-300.0,300.0) ; glMatrixMode(GL_MODELVIEW) ; glLoadIdentity() ; } /* Fonction executee lors de l'appui */ /* d'une touche alphanumerique du clavier */ void keyboard(unsigned char key,int x,int y) { switch (key) { case 0x0D : scn = !scn; glutPostRedisplay(); break; case 0x1B : exit(0); break; } } /* Fonction principale */ int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); glutInitWindowSize(320,240); glutInitWindowPosition(50,50); glutCreateWindow("Coordonnees comptees en pixels"); glutKeyboardFunc(keyboard); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMainLoop(); return(0); }