Author
christiana-minson
View
255
Download
9
Tags:
Embed Size (px)
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>
OpenGL
#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 (0.0, 0.0, 1.0); // Set line segment color to blue. 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.}
OpenGLPoint Functions
• glVertex*( );* : 2, 3, 4 i (integer) s (short) f (float) d (double)
Ex: glBegin(GL_POINTS); glVertex2i(50, 100);glEnd();
Ex: int p1[ ]={50, 100};glBegin(GL_POINTS); glVertex2iv(p1);glEnd();
OpenGLLine Functions
• GL_LINES
• GL_LINE_STRIP
• GL_LINE_LOOP
Ex: glBegin(GL_LINES); glVertex2iv(p1); glVertex2iv(p2);glEnd();
OpenGL
glBegin(GL_LINES); GL_LINES GL_LINE_STRIP
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd();
GL_LINE_LOOP
p1
p1
p1
p2
p3
p2
p2
p4
p3
p3
p5
p4
p4
p5
OpenGL
glBegin(GL_POINTS); GL_POINTSglVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd();
glPointSize(size);
size: 1,2,…
Ex: glPointSize(2.0); // 2x2 pixels
p1
p2
p3
p5
p4
OpenGL
Polygon FunctionsglRect*(x1, y1, x2, y2);• i (integer)
• s (short)
• f (float)
• d (double)
• v (vector)
Ex:glRecti(200, 100, 50, 250);
Ex:int v1[ ]={200, 100};
int v2[ ]={50, 250};
glRectiv(v1, v2);
(200, 100)
(50, 250)
OpenGL
Ex:glBegin (GL_POLYGON);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
glEnd();
p6 p5
p4
p3p2
p1
GL_POLYGON
OpenGL
Ex:glBegin (GL_TRIANGLES);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
glEnd();
GL_TRIANGLES
p6 p5
p4
p3p2
p1
OpenGL
Ex:glBegin (GL_TRIANGLES);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p6);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd();
GL_TRIANGLES
GL_TRIANGLE_STRIP GL_TRIANGLE_FAN
p6 p5
p4
p3p2
p1
p6 p5
p4
p3p2
p1
p6 p5
p4
p3p2
p1
OpenGL
Ex:glBegin (GL_QUADS);
glVertex2iv(p1);glVertex2iv(p2);glVertex2iv(p3);glVertex2iv(p4);glVertex2iv(p5);glVertex2iv(p6);glVertex2iv(p7);glVertex2iv(p8);
glEnd();
p6
p5p4
p3p2
p1
GL_QUADS
GL_QUAD_STRIP
p7
p8
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); // White
glColor(GL_COLOR_BUFFER_BIT);
OpenGL
Color Functions
glColor3f(r, g, b); 0.0 ≤ r, g, b ≤ 1.0Ex: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
TranslateglTranslatef (tx, ty, tz);
ScaleglScalef (sx, sy, sz);
RotateglRotatef (theta, vx, vy, vz);
OpenGLglColor3f (0.0, 0.0, 1.0); // blue
glRecti(0,0,80,40);
glFlush ( ); I
Modelview Matrix
OpenGLglColor3f (0.0, 0.0, 1.0); // blue
glRecti(0,0,80,40);
glFlush ( );
glColor3f (1.0, 0.0, 0.0); // red
glTranslatef(10.0, 10.0, 0.0);
glRecti(0,0,80,40);
glFlush ( );
I
I.T
Modelview Matrix
OpenGLglColor3f (0.0, 0.0, 1.0); // blue
glRecti(0,0,80,40);
glFlush ( );
glColor3f (1.0, 0.0, 0.0); // red
glTranslatef(10.0, 10.0, 0.0);
glRecti(0,0,80,40);
glFlush ( );
glColor3f (1.0, 0.0, 0.0); // red
glScalef(2.0, 2.0, 0.0);
glRecti(0,0,80,40);
glFlush ( );
I
I.T
I.T.S
Modelview Matrix
OpenGLglColor3f (0.0, 0.0, 1.0); // blue
glRecti(0,0,80,40);
glFlush ( );
glColor3f (1.0, 0.0, 0.0); // red
glTranslatef(10.0, 10.0, 0.0);
glRecti(0,0,80,40);
glFlush ( );
glColor3f (1.0, 0.0, 0.0); // red
glScalef(2.0, 2.0, 0.0);
glRecti(0,0,80,40);
glFlush ( );
glColor3f (0.0, 1.0, 0.0); // green
glRotatef(20.0, 0.0, 0.0, 1.0);
glRecti(0,0,80,40);
glFlush ( );
I
I.T
I.T.S
I.T.S.R
Modelview Matrix
OpenGL – Transformations
Matrix Stack
glPushMatrix ();
glPopMatrix ();
OpenGLglColor3f (0.0, 0.0, 1.0); // blue
glRecti(0,0,80,40);
glFlush ( );
glColor3f (1.0, 0.0, 0.0); // red
glTranslatef(10.0, 10.0, 0.0);
glRecti(0,0,80,40);
glPushMatrix();
glFlush ( );
I.T
glColor3f (1.0, 0.0, 0.0); // red
glScalef(2.0, 2.0, 0.0);
glRecti(0,0,80,40);
glFlush ( );
I.T
glColor3f (0.0, 1.0, 0.0); // green
glPopMatrix();
glRotatef(20.0, 0.0, 0.0, 1.0);
glRecti(0,0,80,40);
glFlush ( );
I
I.T
I.T.S
I.T.R
OpenGL – 2D Viewing
Clipping WindowgluOrtho2D (xwmin, xwmax, ywmin, ywmax); float or
double
Viewport FunctionglViewport (xvmin, yvmin, vpWidth, vpHeight);
integer
(xvmin, yvmin)
(xwmax, ywmax)Window
Viewport
(xwmin, ywmin)
vpWidth
vpH
eig
ht
OpenGL – 2D ViewingCreate 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 ViewingDisplay 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
xw
yw
zw
xvyv
zvV
P0NPref
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)
xw
yw
zw
xv
yv
zv
V
P0
Pref
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 FunctionsCube 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 FunctionsTetrahedron glutSolidTetrahedron () glutWireTetrahedron ()
• 4 sided
Octahedron glutSolidOctahedron () glutWireOctahedron ()
• 8 sided
Dodecahedron glutSolidDodecahedron () glutWireDodecahedron ()
• 12 sided
Icosahedron glutSolidIcosahedron () glutWireIcosahedron ()
• 20 sided