Opengl
Download
1 / 46

OpenGL - PowerPoint PPT Presentation


  • 272 Views
  • Uploaded on
  • Presentation posted in: General

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha

Download Presentation

OpenGL

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


Libraries and Headers


glColor3f(…)

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

Function Naming Conventions

f: 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.2 Window Resize Callback

void resize(int w, int h)

{

……

display();

}


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_POINTS

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()


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”

    …..


+Y

+X

+Z

Default Viewing

By default, the camera is at the origin, looking down the negative z-axis


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


y

aspect ratio = w/h

w

h

z

fovy

Far-plane: zFar

x

Near-plane: zNear

Viewing volume

Perspective Projection Volume


Perspective 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

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 Transformation


Viewport 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


ad
  • Login