/* Left Click Spins the square and Right Click Stops it Build with: gcc -Wall glutspin.c -lglut -o glutspin */ #include #include #include #include static GLfloat spin=0.0; void init(void) { glClearColor(0.0,0.0,0.0,0.0); //glShadeModel(GL_FLAT); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glRotatef(spin,0.0,0.0,1.0); glColor3f(1.0,1.0,1.0); glRectf(-25.0,-25.0,25.0,25.0); glPopMatrix(); glutSwapBuffers(); } void spinDisplay(void) { spin+=2.0; if(spin>360.0) spin-=360.0; glutPostRedisplay(); } void reshape(int w, int h) { glViewport(0,0,(GLsizei) w,(GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void mouse(int button,int state, int x, int y) { switch(button) { case GLUT_LEFT_BUTTON: if(state==GLUT_DOWN) printf("left button spinin\n"); glutIdleFunc(spinDisplay); break; case GLUT_RIGHT_BUTTON: if(state==GLUT_DOWN) printf("right button paused\n"); glutIdleFunc(NULL); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowPosition(200,200); glutInitWindowSize(200,200); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); //most impt callback glutReshapeFunc(reshape); glutMouseFunc(mouse); glutMainLoop(); return 0; }