1 / 32

OpenGL & GLUT Mouse Interaction & Camera Control

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

zorana
Télécharger la présentation

OpenGL & GLUT Mouse Interaction & Camera Control

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. OpenGL & GLUTMouse Interaction & Camera Control Mouse events, Advanced camera control George Georgiev Telerik Corporation www.telerik.com

  2. Table of Contents • GLUT Mouse Interaction • Mouse up/down events • Passive motion • Active motion • OpenGL Camera • Default transformation • “Manual” control • Custom camera class

  3. GLUT Mouse Interaction Mouse event callbacks

  4. 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

  5. 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)

  6. 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

  7. 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

  8. GLUT Mouse Interaction • Detecting movement • Types • Passive • Mouse moves • No buttons pressed • Active • Mouse moves • One or more buttons pressed

  9. 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)

  10. 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)

  11. 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

  12. 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)

  13. 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

  14. Custom mouse class Live Demo

  15. Mouse Interaction ? ? Questions? ? ? ? ? ? ? ? ? ?

  16. OpenGL Camera Control Basic and Advanced camera positioning

  17. OpenGL Camera Control • Default camera position • Set up with glLoadIdentity() • Centered at coordinate system center (0, 0, 0) • Rotation around all axes – zero (0, 0, 0) • Looks down the negative Z axis

  18. OpenGL Camera Control • “Manual” control • Applying transformations to the world • Opposite those of the camera • Applied before rendering anything else • Why not use gluLookAt ? • Does the same things without asking you • Gives you less freedom • Future – transformations won’t be deprecated • gluLookAt most probably will

  19. OpenGL Camera Control • “Manual” control (2) • Imagining it – three options • Positioning the ‘world’ • Opposite to the location and orientation of the ‘camera’ • Positioning the ‘camera’ away from the ‘world’ • Positioning the coordinate system of the ‘paintbrush’ • Either way, the result is the same

  20. OpenGL Camera Control • “Manual” control (3) • The steps • Load default view • glLoadIdentity – not really camera-related • Move away • glTranslate* • Look away • glRotate* • Move on to lighting, drawing objects, etc…

  21. OpenGL Camera control • Moving away • glTranslate* • Specifies a translation • Applies to any subsequently drawn geometry • You could imagine it moves the ‘paintbrush’ • Used for all object positioning (not just camera) • Say we want the camera at C(0, 0, 20) • glTranslatef(0, 0, -20)

  22. OpenGL Camera control • Looking away • glRotate* • Specifies a rotation • Applies to any subsequently drawn geometry • You could imagine it turns the ‘paintbrush’ • Used for all object positioning (not just camera) • If we want the camera to look right 90 degrees • glRotatef (-90, 0, 1.0, 0)

  23. OpenGL Camera control • Looking away (2) – explanation • glRotatef parameters • 1st parameter – degrees to rotate • 2nd, 3rd, 4th parameter – multiplier for resultant rotation on x, y, z axis respectively • Example: glRotatef (90, 0.5, 1.0, 0.0) = rotate by • 45 degrees round X • 90 degrees round Y • 0 degrees round Z

  24. OpenGL Camera control • Looking away (3) – explanation • glRotatef positive rotations • Positive rotation round Y

  25. OpenGL Camera control • Looking away (4) – explanation • glRotatef positive rotations • Positive rotation round X

  26. OpenGL Camera control • Looking away (5) – explanation • glRotatef positive rotations • Positive rotation round Z

  27. OpenGL Camera Control • Basic camera control • So far we can • Set the location of the camera • Set the orientation of the camera • Limit the rotation of the camera • Hard to do that with gluLookAt

  28. OpenGL Camera Control • Advanced camera control • A good camera can • Move forward and backward • Strafe left and right • Move up and down • Look left and right • Look up and down • Tilt left and right • “LookAt”

  29. OpenGL Camera Control • Custom camera class • Fields • Location, last location • Rotation (Euler angles), last rotation • Forward vector • Right vector • Upward vector • Speed? Maximum upward (x) rotation? Etc…

  30. OpenGL Camera Control • Custom camera class • Methods • Set/Get location • Set/Get rotation • Move forward, backward, upward, downward • Strafe left, right • Look up, down, left, right • Tilt left, tilt right • “Look at”, “sweep left/right”, “fly to” ? Etc…

  31. Custom camera class Live Demo

  32. Mouse Interaction & Camera control ? ? Questions? ? ? ? ? ? ? ? ? ?

More Related