1 / 10

OpenGL Event Driven Programming

OpenGL Event Driven Programming. Program responds to events Events are handled by user defined callback functions Callbacks must know context and event type (passed through variables). Event Driven Programming. Display Handler. Main Event Loop. Keyboard Handler. Mouse Handler.

Download Presentation

OpenGL Event Driven Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OpenGLEvent Driven Programming • Program responds to events • Events are handled by user defined callback functions • Callbacks must know context and event type (passed through variables)

  2. Event Driven Programming Display Handler Main Event Loop Keyboard Handler Mouse Handler

  3. Simple Example Displaying a square int main (int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); int windowHandle = glutCreateWindow("Simple GLUT App"); glutDisplayFunc(redraw); glutMainLoop(); return 0; }

  4. Display Callback Called when window is redrawn void redraw() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1, 0, 0); glVertex3f(-0.5, 0.5, 0.5); glVertex3f(0.5, 0.5, 0.5); glVertex3f(0.5, -0.5, 0.5); glVertex3f(-0.5, -0.5, 0.5); glEnd(); // GL_QUADS glutSwapBuffers(); }

  5. More GLUT Additional GLUT functions glutPositionWindow(int x,int y); glutReshapeWindow(int w, int h); Additional callback functions glutReshapeFunction(reshape); glutMouseFunction(mousebutton); glutMotionFunction(motion); glutKeyboardFunction(keyboardCB); glutSpecialFunction(special); glutIdleFunction(animate);

  6. Reshape Callback Called when the window is resized void reshape(int w, int h) { glViewport(0.0,0.0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0,w,0.0,h, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }

  7. Mouse Callbacks Called when the mouse button is pressed void mousebutton(int button, int state, int x, int y) { if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) { rx = x; ry = winHeight - y; } } Called when the mouse is moved with button down void motion(int x, int y) { rx = x; ry = winHeight - y; }

  8. Keyboard Callbacks Called when a button is pressed void keyboardCB(unsigned char key, int x, int y) { switch(key) { case 'a': cout<<"a Pressed"<<endl; break; } } Called when a special button is pressed void special(int key, int x, int y) { switch(key) { case GLUT_F1_KEY: cout<<“F1 Pressed"<<endl; break; } }

  9. Animation Callbacks Called when the system is idle void animationCB() { float time = glutGet(GLUT_ELAPSED_TIME); glRotated(time,0.0,1.0,0.0); glutPostRedisplay(); }

  10. Menu Callbacks Creating a menu enum { M_NONE, M_OPEN, M_SAVE, M_EXIT }; glutCreateMenu(menuFunc); glutAddMenuEntry("Open", M_OPEN); glutAddMenuEntry("-----------------------", M_NONE); glutAddMenuEntry("Exit", M_EXIT); glutAttachMenu(GLUT_RIGHT_BUTTON); Called when a menu button is pressed void menuFunc(int value) { switch(value) { case M_EXIT: exit(0); break; } }

More Related