opengl. opengl opengl resources: the red book, manual pages,

35
OPENGL

Upload: christiana-minson

Post on 14-Dec-2015

331 views

Category:

Documents


9 download

TRANSCRIPT

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