#include #include /* Minimum stack space */ static USED const char *stack = "$STACK:65535"; void myinit(void) { glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); } void drawPlane(void) { glBegin (GL_QUADS); glNormal3f (0.0, 0.0, 1.0); glVertex3f (-1.0, -1.0, 0.0); glVertex3f (0.0, -1.0, 0.0); glVertex3f (0.0, 0.0, 0.0); glVertex3f (-1.0, 0.0, 0.0); glNormal3f (0.0, 0.0, 1.0); glVertex3f (0.0, -1.0, 0.0); glVertex3f (1.0, -1.0, 0.0); glVertex3f (1.0, 0.0, 0.0); glVertex3f (0.0, 0.0, 0.0); glNormal3f (0.0, 0.0, 1.0); glVertex3f (0.0, 0.0, 0.0); glVertex3f (1.0, 0.0, 0.0); glVertex3f (1.0, 1.0, 0.0); glVertex3f (0.0, 1.0, 0.0); glNormal3f (0.0, 0.0, 1.0); glVertex3f (0.0, 0.0, 0.0); glVertex3f (0.0, 1.0, 0.0); glVertex3f (-1.0, 1.0, 0.0); glVertex3f (-1.0, 0.0, 0.0); glEnd(); } void display (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glTranslatef (-2.1, 0.0, 0.0); glColor3f(1.0, 0.0, 0.0); drawPlane (); glPopMatrix (); glPushAttrib(GL_CURRENT_BIT); glPushMatrix (); glColor3f(0.0, 1.0, 0.0); glTranslatef (0.0, 0.0, 0.0); drawPlane (); glPopMatrix (); glPopAttrib(); glPushMatrix (); glTranslatef (2.1, 0.0, 0.0); drawPlane (); glPopMatrix (); glFlush (); } void myReshape(int w, int h) { glViewport (0, 0, w, h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); if (w <= h) { glOrtho (-1.5, 1.5, -1.5*(GLdouble)h/(GLdouble)w, 1.5*(GLdouble)h/(GLdouble)w, -10.0, 10.0); } else { glOrtho (-1.5*(GLdouble)w/(GLdouble)h, 1.5*(GLdouble)w/(GLdouble)h, -1.5, 1.5, -10.0, 10.0); } glMatrixMode (GL_MODELVIEW); } static void key(unsigned char k, int x, int y) { switch (k) { case 27: /* Escape */ exit(0); break; default: return; } glutPostRedisplay(); } /* Main Loop * Open window with initial window size, title bar, * RGBA display mode, and handle input events. */ int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 200); glutCreateWindow (argv[0]); myinit(); glutReshapeFunc (myReshape); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }