- 301 Views
- Uploaded on

Download Presentation
## PowerPoint Slideshow about 'OpenGL' - shayla

**An Image/Link below is provided (as is) to download presentation**

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript

### 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

library name, command name, # of arguments, argument type

Function Naming Conventionsf: 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.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_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()

- Matrix stacks

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”
…..

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

aspect ratio = w/h

w

h

z

fovy

Far-plane: zFar

x

Near-plane: zNear

Viewing volume

Perspective Projection VolumePerspective 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

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 TransformationViewport 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

Download Presentation

Connecting to Server..