// Copyright (c) David Kabala // Fall 2009 #include class SceneManager { protected: GLenum _DrawPrimitiveType; public: SceneManager(void) : _DrawPrimitiveType(GL_POINTS) { } void init(void) { glPointSize(5.0f); glLineWidth(5.0f); } void reshape(int w, int h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-w/2.0,w/2.0,-h/2.0,h/2.0,-1.0,1.0); glMatrixMode(GL_MODELVIEW); glutPostRedisplay(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(_DrawPrimitiveType); glColor3f(1.0, 1.0, 1.0); /* white */ glVertex2i(-100, 100); glVertex2i(100, 100); glVertex2i(100, -100); glVertex2i(-100, -100); glEnd(); glFlush(); /* Single buffered, so needs a flush. */ } void keyboard(unsigned char key, int x, int y) { switch(key) { case 'z': exit(0); break; case 'p': //Points _DrawPrimitiveType = GL_POINTS; break; case 'l': //Lines _DrawPrimitiveType = GL_LINES; break; case 't': //Triangles _DrawPrimitiveType = GL_TRIANGLES; break; case 'q': //Quads _DrawPrimitiveType = GL_QUADS; break; case 'n': //Polygon _DrawPrimitiveType = GL_POLYGON; break; } glutPostRedisplay(); } }; SceneManager mgr; void reshape(int w, int h) { mgr.reshape(w,h); } void display(void) { mgr.display(); } void keyboard(unsigned char key, int x, int y) { mgr.keyboard(key,x,y); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); glutCreateWindow("Primitives"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); mgr.init(); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }