480 likes | 890 Views
OpenGL. A Brief Overview. What is OpenGL?. It is NOT a programming language . It is a Graphics Rendering API consisting of a set of function with a well defined interface.
E N D
OpenGL A Brief Overview
What is OpenGL? • It is NOT a programming language. • It is a Graphics Rendering API consisting of a set of function with a well defined interface. • Whenever we say that a program is OpenGL-based or OpenGL applications, we mean that it is written in some programming language (such as C/C++ or Java) that makes calls to one or more of OpenGL libraries.
Useful Websites and Books • Official Site http://www.opengl.org • Non official sites http://nehe.gamedev.net/ http://google.com/ • BOOKS OpenGL Red Book & OpenGL Blue Book
Three Views of OpenGL • Programmer’s view • Specify a set of objects to render • Describe the properties of these objects • Define how these objects should be viewed • State machine • States determine how the inputs are processed. • Change a state (such as color) by using state changing functions • OpenGL uses Rendering Pipeline Model • Models -> Transformer -> Clipper -> Projector -> Rasterizer -> Image
OpenGL API Functions • OpenGL contains over 200 functions • Primitive functions: define the elements (e.g. points, lines, polygons, etc.) • Attribute functions: control the appearance of primitives (e.g. colors, line types, light source, textures, etc.) • Viewing functions: determine the properties of camera. Handle transformations. • Windowing functions: not part of core OpenGL • Other functions
glColor3f(…) library name, command name, # of arguments, argument type Function Naming Conventions f: the argument is float type i: the argument is integer type v: the argument requires a vector gl: OpenGL glu: GLU glut: GLUT
A Sample Program void main (intargc, char **argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutCreateWindow (“My First Program"); myinit (); glutDisplayFunc ( display ); glutReshapeFunc ( resize ); glutKeyboardFunc ( key ); glutMainLoop (); } 1 2 3 4
1. Initialize & Create Window void main (intargc, char **argv) { glutInit (&argc, argv); // GLUT initialization glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // display model glutInitWindowSize (500, 500); // set window size glutCreateWindow (“My First Program"); // create window …… }
2. Initialize OpenGL State void myinit(void) { glClearColor(1.0, 1.0, 1.0, 1.0); // background color glColor3f(1.0, 0.0, 0.0); // line color glMatrixMode(GL_PROJECTION); // set up viewing: glLoadIdentity(); // load identity matrix gluOrtho2D(0.0, 500.0, 0.0, 500.0); // specify Orthographic view glMatrixMode(GL_MODELVIEW); // go back to MV matrix }
3. Register Callback Functions void main (intargc, char **argv) { …… glutDisplayFunc ( display ); // display callback glutReshapeFunc ( resize ); // window resize callback glutKeyboardFunc ( key ); // keyboard callback …… }
(side note) GLUT Callback Functions • Contents of window need to be refreshed glutDisplayFunc() • Window is resized or moved glutReshapeFunc() • Key action glutKeyboardFunc() • Mouse button action glutMouseFunc() • Mouse moves while a button is pressed glutMotionFunc() • Mouse moves regardless of mouse button state glutPassiveMouseFunc() • Called when nothing else is going on glutIdleFunc()
3.1 Rendering Callback void display( void ) { intk; glClear(GL_COLOR_BUFFER_BIT); for( k=0; k<5000; k++) …… }
3.2 Window Resize Callback void resize(int w, int h) { …… display(); }
3.3 Keyboard Input Callback void key( char mkey, int x, int y ) { switch( mkey ) { case ‘q’ : exit( EXIT_SUCCESS ); break; …… } }
4. Event Process Loop • This is where your application receives events, and schedules when callback functions are called void main (intargc, char **argv) { …… glutMainLoop(); }
2D Geometric Primitives • Primitives – fundamental entities such as point and polygons • Basic types of geometric primitives • Points • Line segments • Polygons
GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_POLYGON GL_TRIANGLES GL_TRIANGLE_FAN 2D Geometric Primitives GL_QUADS All geometric primitives are specified by vertices
Specifying Geometric Primitives glBegin( type ); glVertex*(…); …… glVertex*(…); glEnd(); typedetermines how vertices are combined
Example • void drawSquare (GLfloat *color) { • glColor3fv( color ); // sets the color of the square glBegin(GL_POLYGON); glVertex2f ( 0.0, 0.0 ); glVertex2f ( 1.0, 0.0 ); glVertex2f ( 1.1, 1.1 ); glVertex2f ( 0.0, 1.0 ); glEnd(); glFlush() // force the renderer to output the results }
2D Viewing • Where do we draw the 2D object? • Assume that we draw objects on an infinite sheet of paper • Then we need to specify clipping region and project these 2D objects to the screen void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
Coordinate Systems and Transformation • Identify which matrix we wish to alter • Set the matrix to an identity matrix • Alter the matrix to form the desired matrix glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
Coordinate Systems and Transformation glMatrixMode(GLenum mode); • Identify which matrix we wish to alter – The mode is usually GL_MODELVIEW, GL_PROJECTION glLoadIdentity(); • Set the current matrix to an identity matrix
Enabling GL Features • Features – lighting, hidden-surface removal, texture mapping, etc… • Each feature will slow down the rendering process. • We can enable/disable each feature individually void glEnable(GLenum feature) void glDisable(GLenum feature) E.g. glEnable(GL_LIGHTING);
Enabling GL Features GL_ALPHA_TEST If enabled, do alpha testing. GL_AUTO_NORMAL If enabled, generate normal vectors when either GL_MAP2_VERTEX_3 or GL_MAP2_VERTEX_4 is used to generate vertices. See glMap2. GL_BLEND If enabled, blend the incoming RGBA color values with the values in the color buffers.. GL_CLIP_PLANE i If enabled, clip geometry against user-defined clipping plane i.. GL_COLOR_LOGIC_OP If enabled, apply the currently selected logical operation to the incoming RGBA color and color buffer values. GL_COLOR_MATERIAL If enabled, have one or more material parameters track the current color. GL_COLOR_TABLE If enabled, preform a color table lookup on the incoming RGBA color values. GL_CONVOLUTION_1D If enabled, perform a 1D convolution operation on incoming RGBA color values. GL_CONVOLUTION_2D If enabled, perform a 2D convolution operation on incoming RGBA color values. ……
Saving the State • State changing functions – overwrites the state variables • We can store previous state values for later use • Matrix stacks void glPushMatrix() void glPopMatrix() • Attribute stacks void glPishAttrib(GLbitfield mask) void glPopAttrib()
Saving the State glMatrix(GL_PROJECTION) // set projection matrix // draw scene glPushMatrix(); // change the project matrix //draw scene glPopMatrix();
Double Buffering • Use two buffers: front buffer and back buffer to guarantee the displaying of a fully redrawn butter image glutSwapBuffers(); • Replace glFlush() by glutSwapBuffer() in the display callback if using double buffering
Transformations and Camera Analogy • Modeling transformation • Positioning and moving the model. • Viewing transformation • Positioning and aiming camera in the world. • Projection transformation • Adjusting the lens of the camera. • Viewport transformation • Enlarging or reducing the physical photograph.
Transformations in OpenGL • Transformations are specified by matrix operations. Desired transformation can be obtained by a sequence of simple transformations that can be concatenated together. • Transformation matrix is usually represented by 4x4 matrix (homogeneous coordinates). • Provides matrix stacks for each type of supported matrix to store matrices.
Specifying Operations (1) • Translation glTranslate {fd} (TYPE x, TYPE y, TYPE z) Multiplies the current matrix by a matrix that translates an object by the given x, y, z.
Specifying Operations (2) • Scaling glScale {fd} (TYPE x, TYPE y, TYPE z) Multiplies the current matrix by a matrix that scales an object by the given x, y, z.
Specifying Operations (3) • Rotation glRotate {fd} (TYPE angle, TYPE x, TYPE y, TYPE z) Multiplies the current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from origin through the point by the given x, y, z. The angle parameter specifies the angle of rotation in degrees.
Order of Transformations • The transformation matrices appear in reverse order to that in which the transformations are applied. • In OpenGL, the transformation specified most recently is the one applied first.
Viewing-Modeling Transformation • If given an object, and we want to render it from a viewpoint, what information do we have to have? • Viewing position • Which way I am looking at • Which way is “up” …..
+Y +X +Z Default Viewing By default, the camera is at the origin, looking down the negative z-axis
Where are we and what are we looking at? y y Loot at (atx, aty, atz) View-up vector (upx, upy, upz) x x Model z z Eyepoint (eyex, eyey, eyez)
Viewing in OpenGL • Look-At Function gluLookAt (eyex, eyey, eyez, atx, aty, atz, upx, upy, upz) Defines a viewing matrix and multiplies the current matrix by it. Alters the ModelViewmatrix.
Projection Transformation • Projection & Viewing Volume • Projection Transformation • Viewpoint Transformation
y aspect ratio = w/h w h z fovy Far-plane: zFar x Near-plane: zNear Viewing volume Perspective Projection Volume
Perspective Projection Commands glFrustum( left, right, bottom, top, zNear, zFar ) Creates a matrix for a perspective viewing frustum and multiplies the current matrix by it. Alters the Projection matrix.
Perspective Projection Commands gluPerspective( fovy, aspect, zNear, zFar ) Alternative to glFrustum(..). Creates a matrix for an perspective viewing frustum and multiplies the current matrix by it. Alters the Projection matrix. Note: fovy is the field of view (fov) angle between the top and bottom planes of the clipping volume. aspect is the aspect ratio
Viewport • Viewport • The region within the window that will be used for drawing the clipping area • By default, it is set to the entire rectangle of the window that is opened • Measured in the window coordinates, which reflect the position of pixels on the screen related to the lower-left corner of the window
h h w w A viewpoint is defined as the same size as the window A viewpoint is defined as half the size of the window Viewport Transformation
Viewport Commands • glViewport( x, y, width, height ) Defines an area of the window into which the final image is mapped (x, y) specifies the lower-left corner of the viewport (width, height) specifies the size of the viewport rectangle
Advanced Topics • Lighting • Texture Mapping • Plotting Implicit Functions • Shadows • Fog • Picking (object selection) • GUI (glut pop-up menus,gluilibrary) Reference links given on slide 3