Mouse events, Advanced camera control George Georgiev Telerik Corporation
GLUT Mouse Interaction Mouse up/down events Passive motion Active motion OpenGL Camera Default transformation “Manual” control Custom camera class 2
Mouse event callbacks
4 GLUT provides mouse detection capabilities Advantages Multi-platform Similar to other GLUT routines Easy to code Disadvantages Doesn’t receive device information No scroll information Unstable ‘leave’ and ‘enter’ events
5 Detecting mouse buttons Registering callback function glutMouseFunc(void(*func)(int button, int state, int x, int y)) func – mouse button callback function button – mouse button raising the event state – type of event x, y – cursor coordinates (from upper left corner)
6 Detecting mouse buttons (2) Callback parameter values button GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON state GLUT_DOWN GLUT_UP
7 Detecting mouse buttons (2) Callback parameter values button GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON state GLUT_DOWN GLUT_UP
8 Detecting movement Types Passive Mouse moves No buttons pressed Active Mouse moves One or more buttons pressed
9 Passive motion Registering callback function glutPassiveMotionFunc(void(*func)(int x, int y)) func – mouse passive motion callback x, y – cursor coordinates (from upper left corner)
10 Active motion Registering callback function glutMotionFunc(void(*func)(int x, int y)) func – mouse active motion callback x, y – cursor coordinates (from upper left corner)
GLUT Mouse leave and entry routines Detect when cursor leaves and enters window Registering callback glutEntryFunc(void(*func)(int state)) Func – callback handling cursor leaving and entering window State – enter or leave event GLUT_ENTERED GLUT_LEFT 11
Cursor-related routines glutWarpPointer (int x, int y) Sends cursor to specified coordinates glutSetCursor (int cursor) Sets the cursor image (style) for the window Values: GLUT_CURSOR_NONE, GLUT_CURSOR_INFO, GLUT_CURSOR_DESTROY, etc… Google for more (much, much more) 12
Object-oriented mouse handling Custom mouse class Current cursor position Last cursor position and/or drag-begin position Current mouse button states Last mouse button states Cursor style Anything else you can think of 13
Live Demo