Opengl
This presentation is the property of its rightful owner.
Sponsored Links
1 / 46

OpenGL PowerPoint PPT Presentation


  • 191 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.

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

OpenGL

A Brief Overview


What is opengl

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

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

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

Libraries and Headers


Function naming conventions

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

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

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

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

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

(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

3.1 Rendering Callback

void display( void )

{

intk;

glClear(GL_COLOR_BUFFER_BIT);

for( k=0; k<5000; k++)

……

}


3 2 window resize callback

3.2 Window Resize Callback

void resize(int w, int h)

{

……

display();

}


3 3 keyboard input callback

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

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

2D Geometric Primitives

  • Primitives – fundamental entities such as point and polygons

  • Basic types of geometric primitives

    • Points

    • Line segments

    • Polygons


Opengl

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


Opengl

Specifying Geometric Primitives

glBegin( type );

glVertex*(…);

……

glVertex*(…);

glEnd();

typedetermines how vertices are combined


Example

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

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

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 transformation1

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

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 features1

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

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 state1

Saving the State

glMatrix(GL_PROJECTION)

// set projection matrix

// draw scene

glPushMatrix();

// change the project matrix

//draw scene

glPopMatrix();


Double buffering

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

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

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

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

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

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

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”

    …..


Default viewing

+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

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

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 Transformation

  • Projection & Viewing Volume

  • Projection Transformation

  • Viewpoint Transformation


Perspective projection volume

y

aspect ratio = w/h

w

h

z

fovy

Far-plane: zFar

x

Near-plane: zNear

Viewing volume

Perspective Projection Volume


Perspective projection commands

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.


Opengl

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

  • 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


Viewport transformation

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

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

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


  • Login