Computer Graphics(fall 2009)
School of Computer ScienceUniversity of Seoul
Chap 3: Input and Interaction
1. Interaction2. Input Devices3. Clients and Servers4. Display Lists5. Programming Event-Driven Input6. Menus7. Picking8. A Simple Paint Program9. Building Interactive Models10. Animating Interactive Programs11. Design of Interactive Programs12. Logic Operations
3.1 Interaction
Sketchpad
Developed by Ivan Sutherland as part of his Ph.D thesis at MIT (1963).
Received the Turing Award in 1988. Ancestor of…
CAD GUI OOP HCI
Adopted lightpen as input device Demo on YouTube
3.2 Input Devices
Physical Input Devices
Keyboard Mouse, trackball, touchpad, pointing stick Data tablet Lightpen Joystick Spaceball Data glove Haptic device Wiimote
Logical Devices
String Keyboard
Locator Mouse
Pick OpenGL “selection”
Choice Discrete Widgets (menu)
Valuators Analog Widgets (slidebar)
Stroke Mouse motion
Input Modes
Measure & trigger Input modes
Request mode Sample mode Event mode
Event queueCallback
GLUT (OpenGL Utility Toolkit) Again, no user interface features in OpenGL. UI should be implemented using other libraries, such as GLUT. GLUT supports (http://www.opengl.org/resources/libraries/glut)
Multiple windows for OpenGL rendering Callback driven event processing Sophisticated input devices An ‘idle’ routine and timers A simple, cascading pop-up menu facility Utility routines to generate various solid and wire frame objects Support for bitmap and stroke fonts Miscellaneous window management functions
3.3 Clients and Servers
3.4 Display Lists
Display List
Groups multiple instructions into one to reduce the traffic between client & server.
Memory required on server side. Useful for text rendering. Care needed not to mess up the states. (transforma-
tion, projection, attributes, etc.) Can be saved/restored by push/pop.
Deprecated in OpenGL 3.0 Complex geometry can be stored in VBO (vertex buffer object).
3.5 ProgrammingEvent-Driven Input
Events Notable GLUT events (
http://www.opengl.org/resources/libraries/glut/spec3/node45.html) glutDisplayFunc glutReshapeFunc glutKeyboardFunc glutMouseFunc glutMotionFunc glutSpecialFunc glutIdleFunc
glutPostRedisplay glutTimeFunc
3.6 Menus
Menus
Supported by GLUT Hierarchical menu supported
3.7 Picking
OpenGL Picking
Can be implemented using selection mode (GL_SELECT) Deprecated in OpenGL 3.0
Can be implemented using occlusion query (http://www.opengl.org/registry/specs/ARB/occlusion_query.txt)
Picking
Selection By adjusting the clipping region and viewport
Using bounding boxes AABB (Axis-aligned bounding box)
Back buffer + glReadPixels()
3.8 A Simple Paint Program
3.9 Building Interactive Mod-els
Building Interactive Models
Instancing To keep the objects in the scene Using structures or classes
Display list For efficient rendering No edition allowed
3.10 Animating Interactive Programs
Double Buffering
To avoid flickering during animation Created using GLUT_DOUBLE in glu-tInitDisplayMode()
Front/back buffers keep being switched us-ing glutSwapBuffers()
When to change the parameters? Idle event callback Timer event callback
3.11 Design of Interactive Programs
3.12 Logic Operations
Logic Operations
Logic operations can be applied to each pixel (source and destination)
XOR for erasable objects