170 likes | 441 Views
OpenGL & GLUT Mouse Interaction & Camera Control. Mouse events, Advanced camera control. George Georgiev. Telerik Corporation. www.telerik.com. Table of Contents. GLUT Mouse Interaction Mouse up/down events Passive motion Active motion OpenGL Camera Default transformation
E N D
OpenGL & GLUTMouse Interaction & Camera Control Mouse events, Advanced camera control George Georgiev Telerik Corporation www.telerik.com
Table of Contents • GLUT Mouse Interaction • Mouse up/down events • Passive motion • Active motion • OpenGL Camera • Default transformation • “Manual” control • Custom camera class
GLUT Mouse Interaction Mouse event callbacks
GLUT Mouse Interaction • 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
GLUT Mouse Interaction • 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)
GLUT Mouse Interaction • Detecting mouse buttons (2) • Callback parameter values • button • GLUT_LEFT_BUTTON • GLUT_MIDDLE_BUTTON • GLUT_RIGHT_BUTTON • state • GLUT_DOWN • GLUT_UP
GLUT Mouse Interaction • Detecting mouse buttons (2) • Callback parameter values • button • GLUT_LEFT_BUTTON • GLUT_MIDDLE_BUTTON • GLUT_RIGHT_BUTTON • state • GLUT_DOWN • GLUT_UP
GLUT Mouse Interaction • Detecting movement • Types • Passive • Mouse moves • No buttons pressed • Active • Mouse moves • One or more buttons pressed
GLUT Mouse Interaction • 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)
GLUT Mouse Interaction • 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 Interaction • 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
GLUT Mouse Interaction • 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)
Mouse Interaction • 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
Custom mouse class Live Demo