430 likes | 1.12k Views
Introduction to OpenGL. OpenGL Overview. OpenGL low-level graphics library specification Hardware Independent use with the C and C++ programming languages but there are also bindings for a number of other programming languages such as Java, Tcl, Ada, and FORTRAN
E N D
OpenGL Overview • OpenGL • low-level graphics library specification • Hardware Independent • use with the C and C++ programming languages • but there are also bindings for a number of other programming languages such as Java, Tcl, Ada, and FORTRAN • Graphics primitives and attributes • points, lines, polygons, images, and bitmaps • geometric transformation • Translation, rotation, scaling, reflection • viewing transformation • viewport • Parallel/Perspective projection
OpenGL Overview • API Hierarchy • OpenGL applications use the window system’s window, input, and event mechanism • GLU supports quadrics, NURBS, complex polygons, matrix utilities, and more Unix System Windows System The OpenGL Visualization Programming Pipeline
Basic OpenGL Syntax • OpenGL Basic Library (OpenGL Core Library) • Function name • Prefix gl • First letter Capital Ex) glBegin, glClear, glCopyPixels, glPolygonMode • Constants name • Begin with the uppercase letter GL • Capital Letter • The underscore(_) is used as a seperator Ex) GL_2D, GL_RGB, GL_CCW, GL_POLYGON, GL_AMIBIENT_AND_DIFFUSE • Data type • Begin with the uppercase letter GL • The remainder of the name : standard data-type (lower case) Ex) GLbyte, GLshort, GLint, GLfloat, GLdouble, GLboolean
Related Libraries • OpenGL Utility (GLU) • GLU library • Setting up viewing and projection matrices • Describing complex objects • Displaying quadric and B-splines • Processing the surface-rendeing operations • Prefix glu • Open Inventor • An Object oriented toolkit based on OpenGL • Written in C++
Related Libraries • Display window • Window-management operation depend on the computer • OpenGL Extension to the X Window System (GLX) • Unix System (Prefix glx) • Windows-to-OpenGL (WGL) • Microsoft Windows System (prefix wgl) • Apple GL (AGL) • Apple System (prefix agl) • Presentation Manager to OpenGL (PGL) • IBM OS/2 (prefix pgl) • OpenGL Utility Toolkit (GLUT) • window system independent toolkit • Interacting with any screen-windowing system • Prefix glut
Installation (1/4) • OpenGL • Header files • gl.h, glu.h C:\Program Files\Microsoft Visual Studio\VC98\Include\GL • Library files • opengl32.lib, glu32.lib • C:\Program Files\Microsoft Visual Studio\VC98\lib • dll files • openGL32.dll, glu32.dll C:\WINNT\system32
Installation (2/4) • Download • GLUT (http://www.xmission.com/~nate/glut.html) • glut-3.7.6-bin.zip (117 KB) • GLUT for Win32 dll, lib and header file • glut-3.7.6-src.zip (4.76 MB) • GLUT source code distribution • Glut-3.7.6-bin.zip • glut.h C:\Program Files\Microsoft Visual Studio\VC98\Include\GL • glut32.lib C:\Program Files\Microsoft Visual Studio\VC98\Lib • glut32.dll C:\WINNT\system32
Installation (3/4) • Link Library Files : ProjectSettingsLink
Header file • Include the header files • GLUT to handle the window-managing operation • #include <GL/glut.h> • OpenGL core library • #include <GL/gl.h> • OpenGL Utility • #include <GL/glu.h> • Required by the C++ code • #include <stdio.h> • #include <stdlib.h> • #include <math.h>
Display-Window Management Using GLUT • Getting Started • GLUT initialization • glutInit (&argc, argv); • Buffering and color modes for the display window • glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB) • Window position & size • glutInitWindowPosition(50, 100); • glutInitWindowSize(400, 300); • A display window is to be created on the screen • glutCreateWindow(“An Example OpenGL Program”); • Specify what the display window is to contain • glutDisplayFunc(lineSegment); • Describing a line segment in a procedure called lineSegment • All display windows activate • glutMainLoop();
A Complete OpenGL Program • OpenGL Program • Set background color • glClearColor (1.0, 1.0, 1.0, 0.0); • 1~3 argument : red, green, blue colors (between 0.0 and 1.0) • Forth parameter : alpha value • Activate the OpenGL blending operations • 0.0 totally transparent object • 1.0 an opaque object • Assigned window color display • glClear (GL_COLOR_BUFFER_BIT); • Color buffer (refresh buffer) that are to be set to the values indicated in the glClearColor function • Set object color • glColor3f (1.0, 0.0, 1.0);
A Complete OpenGL Program • Display a 2D line segment • Orthogonal Projection • glMatrixModel(GL_PROJECTION); • gluOrtho2D (0.0, 200.0, 0.0, 150.0) • Map 2D retangular area of world coordinates to the screen • Lower-left window corner (0.0,0.0) • Upper-right window corner (200.0, 150.0) • Create line segment glBegin (GL_LINES); glVertex2i (180, 15); glVertex2i (10, 145); glEnd();
OpenGL Command Formats glVertex3fv( v ) Data Type Vector Number of components b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double omit “v” for scalar form glVertex2f( x, y ) 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w)
OpenGL Geometric Primitives OpenGL Geometric Primitives • All geometric primitives are specified by vertices • glBegin(mode) and glEnd() and a list of vertices in between • glBegin(mode) glVertex(v0); glVertex(v1); ... glEnd();
#include <GL/glut.h> // (or others, depending on the system in use) void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); // Set display-window color to white. glMatrixMode (GL_PROJECTION); // Set projection parameters. gluOrtho2D (0.0, 200.0, 0.0, 150.0); } void lineSegment (void) { glClear (GL_COLOR_BUFFER_BIT); // Clear display window. glColor3f (1.0, 0.0, 0.0); // Set line segment color to red. glBegin (GL_LINES); glVertex2i (180, 15); // Specify line-segment geometry. glVertex2i (10, 145); glEnd ( ); glFlush ( ); // Process all OpenGL routines as quickly as possible. } void main (int argc, char** argv) { glutInit (&argc, argv); // Initialize GLUT. glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // Set display mode. glutInitWindowPosition (50, 100); // Set top-left display-window position. glutInitWindowSize (400, 300); // Set display-window width and height. glutCreateWindow ("An Example OpenGL Program"); // Create display window. init ( ); // Execute initialization procedure. glutDisplayFunc (lineSegment); // Send graphics to display window. glutMainLoop ( ); // Display everything and wait. }