OpenGL & GLUTMouse Interaction &
Camera ControlMouse events, Advanced camera control
George Georgiev
http://academy.telerik.com
Technical Trainer
academy.telerik.com
/.../3d-game-developme
nt-opengl
George AtanasovFront-End Developer
Table of Contents
GLUT Mouse Interaction Mouse up/down events
Passive motion
Active motion
OpenGL Camera Default transformation
“Manual” control
Custom camera class
2
GLUT Mouse Interaction
Mouse event callbacks
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
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)
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
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
GLUT Mouse Interaction
8
Detecting movement Types
Passive
Mouse moves
No buttons pressed
Active
Mouse moves
One or more buttons pressed
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)
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)
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_LEFT11
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
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
Custom mouse classLive Demo
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезания
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно
?
? ? ??
?? ?
?
?
?
??
?
?
? ?
Questions?
?
Mouse Interaction
http://academy.telerik.com/
OpenGL Camera ControlBasic and Advanced camera positioning
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
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
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 same19
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
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
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
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
OpenGL Camera control Looking away (3) – explanation
glRotatef positive rotations Positive rotation round Y
24
OpenGL Camera control Looking away (4) – explanation
glRotatef positive rotations Positive rotation round X
25
OpenGL Camera control Looking away (5) – explanation
glRotatef positive rotations Positive rotation round Z
26
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
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
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
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
Custom camera classLive Demo
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезания
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно
?
? ? ??
?? ?
?
?
?
??
?
?
? ?
Questions?
?
Mouse Interaction & Camera control
http://academy.telerik.com/
Free Trainings @ Telerik Academy
3D Graphics and Game Development academy.telerik.com/.../3d-game-de
velopment-opengl
Telerik Software Academy academy.telerik.com
Telerik Academy @ Facebook facebook.com/TelerikAcademy
Telerik Software Academy Forums forums.academy.telerik.com