32
OpenGL & GLUT Mouse Interaction & Camera Control Mouse events, Advanced camera control George Georgiev Telerik Corporation www.telerik. com

OpenGL & GLUT Mouse Interaction & Camera Control

  • Upload
    zorana

  • View
    77

  • Download
    2

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: OpenGL & GLUT Mouse Interaction & Camera Control

OpenGL & GLUTMouse Interaction &

Camera ControlMouse events, Advanced camera control

George GeorgievTelerik Corporationwww.telerik.

com

Page 2: OpenGL & GLUT Mouse Interaction & Camera Control

Table of Contents GLUT Mouse Interaction

Mouse up/down events Passive motion Active motion

OpenGL Camera Default transformation “Manual” control Custom camera class

2

Page 3: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

Mouse event callbacks

Page 4: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

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

Page 5: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

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)

Page 6: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

6

Detecting mouse buttons (2) Callback parameter values

button GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON

state GLUT_DOWN GLUT_UP

Page 7: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

7

Detecting mouse buttons (2) Callback parameter values

button GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON

state GLUT_DOWN GLUT_UP

Page 8: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

8

Detecting movement Types

Passive Mouse moves No buttons pressed

Active Mouse moves One or more buttons pressed

Page 9: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

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)

Page 10: OpenGL & GLUT Mouse Interaction & Camera Control

GLUT Mouse Interaction

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)

Page 11: OpenGL & GLUT Mouse Interaction & Camera Control

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

11

Page 12: OpenGL & GLUT Mouse Interaction & Camera Control

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

Page 13: OpenGL & GLUT Mouse Interaction & Camera Control

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

13

Page 14: OpenGL & GLUT Mouse Interaction & Camera Control

Custom mouse classLive Demo

Page 15: OpenGL & GLUT Mouse Interaction & Camera Control

Mouse Interaction

Questions? ?

?? ? ??

?? ?

?

Page 16: OpenGL & GLUT Mouse Interaction & Camera Control

OpenGL Camera ControlBasic and Advanced camera positioning

Page 17: OpenGL & GLUT Mouse Interaction & Camera Control

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

17

Page 18: OpenGL & GLUT Mouse Interaction & Camera Control

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

18

Page 19: OpenGL & GLUT Mouse Interaction & Camera Control

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 19

Page 20: OpenGL & GLUT Mouse Interaction & Camera Control

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…

20

Page 21: OpenGL & GLUT Mouse Interaction & Camera Control

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)

21

Page 22: OpenGL & GLUT Mouse Interaction & Camera Control

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)

22

Page 23: OpenGL & GLUT Mouse Interaction & Camera Control

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

23

Page 24: OpenGL & GLUT Mouse Interaction & Camera Control

OpenGL Camera control Looking away (3) – explanation

glRotatef positive rotations Positive rotation round Y

24

Page 25: OpenGL & GLUT Mouse Interaction & Camera Control

OpenGL Camera control Looking away (4) – explanation

glRotatef positive rotations Positive rotation round X

25

Page 26: OpenGL & GLUT Mouse Interaction & Camera Control

OpenGL Camera control Looking away (5) – explanation

glRotatef positive rotations Positive rotation round Z

26

Page 27: OpenGL & GLUT Mouse Interaction & Camera Control

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

27

Page 28: OpenGL & GLUT Mouse Interaction & Camera Control

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” 28

Page 29: OpenGL & GLUT Mouse Interaction & Camera Control

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…29

Page 30: OpenGL & GLUT Mouse Interaction & Camera Control

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…

30

Page 31: OpenGL & GLUT Mouse Interaction & Camera Control

Custom camera classLive Demo

Page 32: OpenGL & GLUT Mouse Interaction & Camera Control

Mouse Interaction & Camera control

Questions? ?

?? ? ??

?? ?

?