#include "..\glut.h" #include #include #include #include #include "button.cpp" #define PI (3.1415926) /* global variable declarations */ GLint window1, window2; GLfloat theta = 0.0; GLfloat thetaIncrement; bool green = false; bool spinning = true; /* function declarations ----------------------------------*/ void myInit(){ glutSetWindow(window1); glClearColor(0.0, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-2.0, 2.0, -2.0, 2.0); glutSetWindow(window2); glClearColor(0.0, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-2.0, 2.0, -2.0, 2.0); } // end of myInit() /* --------------------------------------------------------*/ void myDisplay1() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex2f(cos(PI*theta/180.0), sin(PI*theta/180)); glVertex2f(-sin(PI*theta/180.0), cos(PI*theta/180)); glVertex2f(-cos(PI*theta/180.0), -sin(PI*theta/180)); glVertex2f(sin(PI*theta/180.0), -cos(PI*theta/180)); glEnd(); glFlush(); } // end of myDisplay1() void myDisplay2() { glClear(GL_COLOR_BUFFER_BIT); if (green) glColor3f(0.0, 1.0, 0.0); else glColor3f(0.0, 0.0, 1.0); glBegin(GL_POLYGON); glVertex2f(cos(PI*theta/180.0), sin(PI*theta/180)); glVertex2f(-sin(PI*theta/180.0), cos(PI*theta/180)); glVertex2f(-cos(PI*theta/180.0), -sin(PI*theta/180)); glVertex2f(sin(PI*theta/180.0), -cos(PI*theta/180)); glEnd(); glutSwapBuffers(); } // end of myDisplay2() /* --------------------------------------------------------*/ void spinDisplay() { theta += thetaIncrement; if (theta >= 360.0) theta -= 360.0; glutSetWindow(window1); glutPostRedisplay(); glutSetWindow(window2); glutPostRedisplay(); } /* --------------------------------------------------------*/ void myKeyboard(unsigned char key, int x, int y) { if (key == 'Q' || key == 'q') exit(0); } /* --------------------------------------------------------*/ void myMouse(int button, int state, int x, int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN && spinning) glutIdleFunc(NULL); if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN && !spinning) glutIdleFunc(spinDisplay); if (state == GLUT_DOWN) spinning = !spinning; } /* --------------------------------------------------------*/ void quit_menu(int id) { if (id == 1) green = true; if (id == 2) exit(0); } /* --------------------------------------------------------*/ int main(int argc, char **argv) { cout << "Enter a thetaIncrement value (0.02 is good!): "; cin >> thetaIncrement; cout << endl; glutInit(&argc, argv); /* set up first window */ glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB ); glutInitWindowSize(300, 300); glutInitWindowPosition(30, 30); window1 = glutCreateWindow("Single Buffered Window"); /* register callback functions */ glutDisplayFunc( myDisplay1 ); glutKeyboardFunc( myKeyboard ); glutIdleFunc( spinDisplay ); glutMouseFunc( myMouse ); /* set up second window */ glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB ); glutInitWindowSize(300, 300); glutInitWindowPosition(350, 30); window2 = glutCreateWindow("Double Buffered Window"); /* register callback functions */ glutDisplayFunc( myDisplay2 ); glutKeyboardFunc( myKeyboard ); glutIdleFunc( spinDisplay ); glutMouseFunc( myMouse ); /* add a menu! */ glutCreateMenu(quit_menu); glutAddMenuEntry("change colors", 1); glutAddMenuEntry("quit", 2); glutAttachMenu(GLUT_RIGHT_BUTTON); /* start the event loop */ myInit(); glutMainLoop(); return 0; } // end of main