OPENGL OpenGL OpenGL resources: www.opengl.org The Red Book, www.glprogramming.com/red/ Manual pages, www.opengl.org/sdk/docs/man3/ OpenGL OpenGL core library OpenGL Utility (GLU) OpenGL Utility Toolkit (GLUT) Header files: #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include <GL/glut.h> // (or others, depending on the system in use) void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); OpenGL // 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); glColor3f (0.0, 0.0, 1.0); glBegin (GL_LINES); glVertex2i (180, 15); glVertex2i (10, 145); glEnd ( ); glFlush ( ); // Clear display window. // Set line segment color to blue. // Specify line-segment geometry. // 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 ( ); glutDisplayFunc (lineSegment); glutMainLoop ( ); } // Execute initialization procedure. // Send graphics to display window. // Display everything and wait. OpenGL Point Functions • glVertex*( ); * : 2, 3, 4 i (integer) s (short) f (float) d (double) Ex: Ex: glBegin(GL_POINTS); glVertex2i(50, 100); glEnd(); int p1[ ]={50, 100}; glBegin(GL_POINTS); glVertex2iv(p1); glEnd(); OpenGL Line Functions • • • GL_LINES GL_LINE_STRIP GL_LINE_LOOP Ex: glBegin(GL_LINES); glVertex2iv(p1); glVertex2iv(p2); glEnd(); OpenGL glBegin(GL_LINES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glEnd(); GL_LINES GL_LINE_STRIP p3 p3 p1 p2 p5 p4 p1 p2 p4 GL_LINE_LOOP p3 p5 p1 p2 p4 OpenGL glBegin(GL_POINTS); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glEnd(); GL_POINTS p3 p5 p2 glPointSize(size); size: 1,2,… Ex: glPointSize(2.0); // 2x2 pixels p1 p4 OpenGL Polygon Functions glRect*(x1, y1, x2, y2); • • • • • i (integer) s (short) f (float) d (double) v (vector) Ex: Ex: glRecti(200, 100, 50, 250); (50, 250) (200, 100) int v1[ ]={200, 100}; int v2[ ]={50, 250}; glRectiv(v1, v2); OpenGL Ex: glBegin (GL_POLYGON); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glVertex2iv(p6); glEnd(); p6 p5 p1 p4 p2 p3 GL_POLYGON OpenGL Ex: glBegin (GL_TRIANGLES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glVertex2iv(p6); glEnd(); p6 p5 p1 p4 p2 p3 GL_TRIANGLES OpenGL Ex: p6 glBegin (GL_TRIANGLES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p6); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glEnd(); p5 p1 p4 p2 p3 GL_TRIANGLES p6 p6 p5 p1 p4 p2 p3 GL_TRIANGLE_STRIP p5 p1 p4 p2 p3 GL_TRIANGLE_FAN OpenGL Ex: glBegin (GL_QUADS); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glVertex2iv(p6); glVertex2iv(p7); glVertex2iv(p8); glEnd(); p1 p8 p4 p3 p5 p6 p7 p2 GL_QUADS GL_QUAD_STRIP OpenGL RGB colors Red Green Blue Color 0 0 0 Black 0 0 1 Blue 0 1 0 Green 0 1 1 Cyan 1 0 0 Red 1 0 1 Magenta 1 1 0 Yellow 1 1 1 White OpenGL Color Functions glClearColor(r, g, b, a); 0.0 ≤ r, g, b, a ≤ 1.0 specifies the color for color buffers glClear(GL_COLOR_BUFFER_BIT); applies the clear color to the color buffers Ex: glClearColor(1.0, 1.0, 1.0, 0.0); glColor(GL_COLOR_BUFFER_BIT); // White OpenGL Color Functions glColor3f(r, g, b); 0.0 ≤ r, g, b ≤ 1.0 Ex: glColor3f(1.0, 0.0, 0.0); // Red glColor3ub(r, g, b); 0 ≤ r, g, b ≤ 255 Ex: glColor3ub(255, 0, 0); // Red OpenGL Reshape Function glutReshapeFunc(func); Ex: glutReshapeFunc(my_reshape_func); OpenGL – Transformations Matrix Operations glMatrixMode routine: • • • • Projection mode (GL_PROJECTION) Modelview mode (GL_MODELVIEW) Texture mode Color mode OpenGL – Transformations Modelview Mode glMatrixMode(GL_MODELVIEW); designates 4x4 modelview matrix as the current matrix. glLoadIdentity(); assigns the identity matrix to the current matrix. OpenGL – Transformations Translate glTranslatef (tx, ty, tz); Scale glScalef (sx, sy, sz); Rotate glRotatef (theta, vx, vy, vz); OpenGL Modelview Matrix I glColor3f (0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); // blue OpenGL Modelview Matrix I I.T glColor3f (0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); glColor3f (1.0, 0.0, 0.0); glTranslatef(10.0, 10.0, 0.0); glRecti(0,0,80,40); glFlush ( ); // blue // red OpenGL Modelview Matrix I I.T I.T.S glColor3f (0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); glColor3f (1.0, 0.0, 0.0); glTranslatef(10.0, 10.0, 0.0); glRecti(0,0,80,40); glFlush ( ); glColor3f (1.0, 0.0, 0.0); glScalef(2.0, 2.0, 0.0); glRecti(0,0,80,40); glFlush ( ); // blue // red // red OpenGL Modelview Matrix I I.T I.T.S I.T.S.R glColor3f (0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); glColor3f (1.0, 0.0, 0.0); glTranslatef(10.0, 10.0, 0.0); glRecti(0,0,80,40); glFlush ( ); glColor3f (1.0, 0.0, 0.0); glScalef(2.0, 2.0, 0.0); glRecti(0,0,80,40); glFlush ( ); // blue // red // red glColor3f (0.0, 1.0, 0.0); // green glRotatef(20.0, 0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); OpenGL – Transformations Matrix Stack glPushMatrix (); glPopMatrix (); OpenGL glColor3f (0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); I I.T I.T.S I.T.R I.T I.T glColor3f (1.0, 0.0, 0.0); glTranslatef(10.0, 10.0, 0.0); glRecti(0,0,80,40); glPushMatrix(); glFlush ( ); glColor3f (1.0, 0.0, 0.0); glScalef(2.0, 2.0, 0.0); glRecti(0,0,80,40); glFlush ( ); // blue // red // red glColor3f (0.0, 1.0, 0.0); // green glPopMatrix(); glRotatef(20.0, 0.0, 0.0, 1.0); glRecti(0,0,80,40); glFlush ( ); OpenGL – 2D Viewing Clipping Window gluOrtho2D (xwmin, xwmax, ywmin, ywmax); float or double Viewport Function glViewport (xvmin, yvmin, vpWidth, vpHeight); (xwmax, ywmax) Window vpHeight Viewport vpWidth (xvmin, yvmin) (xwmin, ywmin) integer OpenGL – 2D Viewing Create Display Window • • • • • glutInit (&argc, &argv) glutInitWindowPosition (xTopLeft, yTopLeft) glutInitWindowSize (width, height) windowID=glutCreateWindow (“title”) glutDestroyWindow (windowID) Display Window Mode • glutInitDisplayMode (mode) Ex: glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); OpenGL – 2D Viewing Display Functions • glutDisplayFunction (dFunc) dFunc (callback function) describes what is to be displayed in the current window • glutPostRedisplay () Indicates that the contents of the current display window should be renewed • glutIdleFunc (iFunc) iFunc is executed when there are no other events for the system to process • glutMainLoop () OpenGL – 3D Viewing Projection glMatrixMode (GL_PROJECTION) Orthogonal Projection gluOrtho (xwmin, xwmax, ywmin, ywmax, dnear, dfar) Perspective Projection gluPerspective (theta, aspect, dnear, dfar) • • • theta: field-of-view angle (00 – 1800) aspect: aspect ratio of the clipping window (width/height) dnear, dfar: positions of the near and far planes (must have positive values) glFrustum (xwmin, xwmax, ywmin, ywmax, dnear, dfar) if xwmin = -xwmax and ywmin = -ywmax then symmetric view volume OpenGL – 3D Viewing glMatrixMode (GL_MODELVIEW) gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz) Designates the origin of the viewing reference frame as, • the world coordinate position P0=(x0, y0, z0) • the reference position Pref=(xref, yref, zref) and • the viewup vector V=(Vx, Vy, Vz) • double-precision, floating-point values y yv w V Pref N xv zv P0 xw zw OpenGL – 3D Viewing gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz) Default parameters are: • P0=(0,0,0) • Pref=(0,0,-1) • V=(0,1,0) yw Pref xw zw OpenGL float eye_x, eye_y, eye_z; void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); // Set display-window color to white. glMatrixMode (GL_PROJECTION); // Set projection parameters. glLoadIdentity(); gluPerspective(80.0, 1.0, 50.0, 500.0); // degree, aspect, near, far glMatrixMode (GL_MODELVIEW); eye_x = eye_y = eye_z = 60; gluLookAt(eye_x, eye_y, eye_z, 0,0,0, 0,1,0); // eye, look-at, view-up } void main (int argc, char** argv) { glutInit (&argc, argv); // Initialize GLUT. glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // Set display mode. glutInitWindowPosition (50, 500); // Set top-left display-window position. glutInitWindowSize (400, 300); // Set display-window width and height. glutCreateWindow ("An Example OpenGL Program"); // Create display window. glViewport (0, 0, 400, 300); init ( ); // Execute initialization procedure. glutDisplayFunc (my_objects); // Send graphics to display window. glutReshapeFunc(reshape); glutKeyboardFunc(keybrd); glutMainLoop ( ); // Display everything and wait. } OpenGL Functions Cube glutSolidCube (size) glutWireCube (size) Cone glutSolidCone (base_radius, height, slices, stacks) glutWireCone (base_radius, height, slices, stacks) Sphere glutSolidSphere (radius, slices, stacks) glutWireSphere (radius, slices, stacks) Teapot glutSolidTeapot (size) glutWireTeapot (size) Torus glutSolidTorus (inner_radius, outer_radius, nsides, rings) glutWireTorus (inner_radius, outer_radius, nsides, rings) OpenGL Functions Tetrahedron glutSolidTetrahedron () glutWireTetrahedron () • 4 sided Octahedron glutSolidOctahedron () glutWireOctahedron () • 8 sided Dodecahedron glutSolidDodecahedron () glutWireDodecahedron () • 12 sided Icosahedron glutSolidIcosahedron () glutWireIcosahedron () • 20 sided