1 GLUT Callback functions Event-driven: Programs that use windows Input/Output Wait until an event happens and then execute some pre-defined functions according to the user’s input Events – key press, mouse button press and release, window resize, etc.
GLUT Callback functions. Event-driven : Programs that use windows Input/Output Wait until an event happens and then execute some pre-defined functions according to the user’s input Events – key press, mouse button press and release, window resize, etc. GLUT Callback Functions. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
GLUT Callback functions
Event-driven: Programs that use windows Input/Output Wait until an event happens and then
execute some pre-defined functions according to the user’s input
Events – key press, mouse button press and release, window resize, etc.
2
GLUT Callback Functions
Callback function : Routine to call when an event happens Window resize or redraw User input (mouse, keyboard) Animation (render many frames)
Lines, GL_LINES pairs of vertices interpreted as individual line
segments
15
Vertices and Primitives
Line Strip, GL_LINE_STRIP series of connected line segments
16
Vertices and Primitives
Line Loop, GL_LINE_LOOP Line strip with a segment added between last and first
vertices
17
Vertices and Primitives
Polygon , GL_POLYGON boundary of a simple, convex polygon
18
Vertices and Primitives
Triangles , GL_TRIANGLES triples of vertices interpreted as triangles
19
Vertices and Primitives
Triangle Strip , GL_TRIANGLE_STRIP linked strip of triangles
v0
v2
v1
v3
v4 v5
v6v7
20
Vertices and Primitives
Triangle Fan , GL_TRIANGLE_FAN linked fan of triangles
v0
v1 v2v3
v4
v5
21
Vertices and Primitives
Quads , GL_QUADS quadruples of vertices interpreted as four-sided
polygons
22
Vertices and Primitives
Quad Strip , GL_QUAD_STRIP linked strip of quadrilaterals
v0 v1
v2 v3
v4 v5
v6v7
23
Vertices and Primitives
Vertices may be specified in 2D, 3D, or 4D. 2D coordinates are promoted to 3D by
assigning a Z value of zero. 4D homogeneous coordinates are reduced to
3D by dividing x, y, and z by the w coordinate (if non-zero).
24
Vertices and Primitives
Between glBegin/ glEnd, those opengl commands are allowed:
glVertex*() : set vertex coordinates glColor*() : set current color glIndex*() : set current color index glNormal*() : set normal vector coordinates glTexCoord*() : set texture coordinates
25
Vertices and Primitives
glMultiTexCoord*() : set texture coordinates for multitexturing
glEdgeFlag*() : control drawing of edges glMaterial*() : set material properties glArrayElement() : Extract array element data glCallList(), glCallLists() : execute display list
26
GLUI
GLUI is a GLUT-based C++ user interface library which provides controls such as buttons, checkboxes, radio buttons, spinners, etc.
It is window-system independent, relying on GLUT to handle all system-dependent issues, such as window and mouse management.
27
GLUI Controls
28
GLUI - Simple Programming Interface GLUI provides default values for many parameters in the API and there
are several ways to create a control:
GLUI *glui;...glui->add_checkbox("Click me"); Adds a simple checkbox with
the name "Click me"glui->add_checkbox("Click me", &state );
The variable state will now be automatically update to reflect the state of the checkbox (live variable).glui->add_checkbox( "Click me", &state, 17, callback_fn );
Now we have a live variable, plus a callback functionwill be invoked (and passed the value '17') wheneverthe checkbox changes state.
29
Usage for standalone GLUI windowsIntegrating GLUI with a new or existing GLUT application is verystraightforward. The steps are:
1. Add the GLUI library to the link line (e.g., glui32.lib for Windows -lglui in Linux).
2. Include the file "glui.h" in all sources that will use the GLUI library.3. Create your regular GLUT windows as usual. Make sure to store the
window id of your main graphics window, so GLUI windows can later send it redisplay events:
int window_id = glutCreateWindow( "Main gfx window" );
4. Register your GLUT callbacks as usual (except the Idle callback, discussed below).
30
Usage for standalone GLUI windows5. Register your GLUT idle callback (if any) with GLUI_Master (a
global object which is already declared), to enable GLUI windows to take advantage of idle events without interfering with your application's idle events. If you do not have an idle callback, pass in NULL.
GLUI_Master.set_glutIdleFunc( myGlutIdle );or
GLUI_Master.set_glutIdleFunc( NULL );6. In your idle callback, explicitly set the current GLUT window before
rendering or posting a redisplay event. Otherwise the redisplay may accidently be sent to a GLUI window.
void myGlutIdle( void ) {
glutSetWindow(main_window);glutPostRedisplay();
}
31
Usage for standalone GLUI windows7. Create a new GLUI window using
GLUI *glui = GLUI_Master.create_glui( "name", flags, x, y );
Note that flags, x, and y are optional arguments. If they are not specified, default values will be used. GLUI provides default values for arguments whenever possible.
8. Add controls to the GLUI window. For example, we can add a checkbox and a quit button with: