220 likes | 330 Views
This midterm review covers essential OpenGL libraries, including gl, glu, and glut, providing a hierarchical overview of each. Dive into the rendering pipeline, exploring how vertices are derived from basis functions and converted into primitives. The lecture also addresses GLSL operations, texture mapping, fragment processing, and GUI event handling with GLUT. Understand the use of buffers, event-driven programming concepts, and how to efficiently manage camera movements using model-view and projection matrices. Prepare effectively for your midterm on OpenGL fundamentals!
E N D
Lecture 7 Midterm Review
OpenGL Libraries • gl: Basic OpenGL library, e.g. primitives. • glu: OpenGL Utility library, a set of functions to create texture mipmaps from a base image, draw quadric surfaces and NURBS. • glut: OpenGL Utility Toolkit library. A system independent windowing system. • Hierarchical view of libraries: • http://www.nigels.com/glt/doc/gl_8h.html
Mesa 3D • Mesa 3D is a free/open source implementation of OpenGL. • This is a good source if you plan to see the implementation details of a function. • http://www.mesa3d.org
Rendering Pipeline • Evaluators • Deriving vertices from basis functions • Vertices can be used to represent a surface • Per-Vertex Operations • Converts vertices into primitives i.e. line, polygon, etc. • Does mathematical operations, i.e. transformation, rotation, projection, etc.
Rendering Pipeline • Rasterization: Conversion of geometric and pixel data into fragments. • Each fragment corresponds to a pixel in frame buffer. • When creating models, many parameters have to be considered, e.g. shading model, color, point size, etc.
Fragment Operations • Before a fragment be placed in frame buffer, the following can be controlled: • Texture Mapping • Fog calculations • Alpha Test, depth buffer test • Blending, masking, etc.
GLUT Window Initialization • What is Buffer? • Clearing the Window • glClearColor(R, G, B, A) • glClearColor(GL_COLOR_BUFFER_BIT) • glClearDepth() • glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
Event Driven Programming • Definition. A programming where the primary activity is reaction to the receipt of event. • Applications: GUI, HCI • Ingredients: • Events: Can be from any source, human input, e.g. mouse or other sensors. • Event Dispatcher: Assigns events to event handlers. • Event Handler
Event Processing in GLUT • Initial Setup: • Initializing Display Modes, e.g. Color mode, Single/Double Buffer, etc. • Entering GLUT event processing loop • void glutMainLoop (void)
Display Function • The display function of current window • When is it called? • If the normal plane of a window needs to be redisplayed as a result of window damage. GLUT determines this based on redisplay state of a window. • When a user requests. • How is it called? • Implicitly: By GLUT, e.g. when the window system reports a region of the window's normal plane is undefined (for example, damaged by another window moving or being initially shown) • Explicitly: Using glutPostRedisplay function.
Double Buffering • Using Two buffers • Front Buffer • Back Buffer • Is specified in initialization step • glutInitDisplayMode (GLUT_DOUBLE) • Replace glFlush() with glSwapBuffers() • Increases the performance • It’s NOT free, you have to pay: memory
Camera Rotation • Example: If we want to move a camera along a circular path and about any one of axes, we use rotation matrix corresponding to that axis. • Then, by increasing the angle from [0…360], we calculate the new location of the camera.
ModelView,Projection,Viewport • ModelView: • Rotation, Translation, Scale. • Projection: • glFrustum, glOrtho, glPerspective • Viewport • glViewport
Viewport • Defines how a rendered image should be displayed on a window.
Camera • Properties: Position, Direction, UpVector • Attention: • Using gluLookAt affects the ModelView Matrix • It is usually placed at the beginning of the display function • It is usually placed after glLoadIdentity(GL_MODELVIEW) • Be careful when placing it in a loop.
Matrix Stack • Pushing matrices into the stack • Poping matrices from the stack • Example: