openGL

advertisement
OPENGL
- Bipindra Bir Shrestha
AGENDA
Introduction to OpenGL
 Demo
 Programming in OpenGL
 Demo
 References

WHAT IS OPENGL?
An application programmer’s
interface (API) that allows
programmers to write programs that
access graphics hardware.
BENEFITS


It is close enough to hardware so that programs
written with OpenGL run efficiently
It is easy to learn and use.
THREE VIEWS OF OPENGL
1.
Programmer’s View
2.
The OpenGL State Machine
3.
The OpenGL Pipeline
THE PROGRAMMER’S VIEW
Specify Geometric Objects
 Describing properties of these objects
 Defining how these objects should be viewed

THE OPENGL STATE MACHINE
Function
Call
Application
Program
Pixels
OpenGL
Display
THE OPENGL PIPELINE
Primitives
Transformer
Clipper
Pixels
Rasterizer
Projector
OPENGL FUNCTIONS





Primitive functions
 Geometric : polygons
 Discrete : bitmap
Attribute functions
 Control attribute of primitives. Eg color, line type, light
sources , textures
Viewing functions
 Determine properties of Camera.
Input functions
 Allow us to control windows on the screen and to use the
mouse and keyboard
Control functions
 Allow us to start and to terminate OpenGL programs
and to turn on various OpenGL features.
OPENGL VERSIONS AND EXTENSIONS




OpenGL is controlled by OpenGL Architectural Review
Board (ARB), which has members from companies such as
SGI,IBM and Microsoft.
Present version is 2.1 . Next version 3.0, release date is not
yet announced due to some issues.
OpenGL is very stable and has lower compatibility.
Extensions: allow vendors to provide additional
functionality through extensions.
 Each vendor has alphabetic abbreviation .


E.g: glCombinerParameterfvNV()
: NV for NVDIA
If many vendors agree on same implementation it
becomes “Standard extension” abbriviated with ARB.

Eg. GL_ARB_multitexture
LANGUAGES





C
C#: The framework Tao for Microsoft .NET includes OpenGL
between other multimedia libraries
Delphi: Dot[4]
Fortran: f90gl supports OpenGL 1.2, GLU 1.2 and GLUT 3.7 [5]
Java:




Lisp: See the cl-opengl project at common-lisp.net
Perl:







Java Bindings for OpenGL (JSR 231) and Java OpenGL (JOGL)
Lightweight Java Game Library (LWJGL)
Perl OpenGL (POGL) module - shared libs written in C
C vs Perl and Perl vs Python benchmarks
PHP: See http://phpopengl.sourceforge.net/
Python: PyOpenGL supports GL, GLU and GLUT [8]
Ruby: See [9] - supports GL, GLU and GLUT
Smalltalk as seen in Croquet Project running on Squeak Smalltalk
Visual Basic: ActiveX Control
CONFIGURING VISUAL STUDIO 2005


Download GLUT binaries for windows from “Nate Robins”
‘s website
http://www.xmission.com/~nate/glut.html
put the files as
File
Location
glut32.dll
C:\WINDOWS\system\ (or system32)
glut32.lib
C:\Program Files\Microsoft Visual Studio 2005\VC\PlatformSDK\Lib
glut.h
C:\Program Files\Microsoft Visual Studio
2005\VC\PlatformSDK\Include\gl

Make sure visual studio c++ projects links in the
GLUT/gl/glu libraries. Goto:
Menu: “Project -> (your-project-name) Properties”
Tab: “Configuration Properties -> Linker -> Input”
Under “Additional Dependencies”, add “glut32.lib opengl32.lib glu32.lib”
Under Configuration Properties->C++->General->Additional Include
Directories : add
"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include"
DEMO
PROGRAMMING IN OPENGL -1

GLUT

Initialize :


Creating a window


int glutCreateWindow(char * title)
Display Function


void glutInit( int argc, char ** argv)
void glutDisplayFunc(void (*func)(void))
Main Loop

void glutMainLoop()
PROGRAMMING IN OPENGL -2

Drawing a rectangle






glBegin(Glenum mode)
glEnd()
void glVertex{2 3 4}{sifd}(Type
xcoordinate,……)
void glClear(Glbitfield mask)
void glFlush()
Changing GLUT defaults
void glutInitDisplayMode(unsigned int
mode)
 void glutInitWindowSize(int width,int
height)
 void glutInitWindowPosition( int x, int
y)

PROGRAMMING IN OPENGL -3

Setting Colors



Two Dimensional Viewing


glPointSize(2.0);
Lines


glMatrixMode( GL_PROJECTION );
glLoadIdentity();
Points


void gluOrtho2D( Gldouble left, Gldouble right,
Gldouble bottom, Gldouble top)
Coordinate Systems and Transformation



void glColor*()
void glClearColor( Glclampf r, GLClampf g, Glclampf b,
Glclampf a )
GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP
in glBegin( GL_LINES );
Enabling OpenGL features
void glEnable( Glenum feature)
 void glDisable( Glenum feature )

PROGRAMMING IN OPENGL -4

Rectangles


Text


void glRect{ sifd} ( TYPE x1,y1,x2,y2 )
void glutBitMapCharcter( void * font, int
char )
Save the state
void glpushMatrix()
 void glPopMatrix()


Viewport

void glViewport( Glint x, GLint y,
Glsizei w, Glsizei h )
INTERACTION AND ANIMATION
Reshape and Idle Callback
 Double buffering
 Using keyboard and mouse
 Mouse motion
 Subwindows and Multiple Windows

THREE-DIMENSIONAL PROGRAMMING
Cameras and Objects
 Orthographic Projections in OpenGL
 Vertex Arrays
 Hidden Surface removal
 GLUT Objects

TRANSFORMATION
Translation
 Rotation
 Scaling
 Setting vertices directly

LIGHTS AND MATERIALS
Enabling and disabling OpenGL lighting
 Specifying Light source
 Controlling the Lighting Calculation
 Smooth Shading
 Transparency

IMAGES
Pixels and Bitmaps
 Displaying a bitmap
 Mixing Bitmaps and Geometry
 Colors and Masks
 Drawing Modes
 Reading and Writing Pixels
 Selecting Buffers
 Luminance
 Pixel Zoom

TEXTURE MAPPING
Texture Coordinates
 Texture Parameters
 Applying textures to surface
 Minimaps

CURVES AND SURFACES
Bezier Curves and surfaces
 One dimensional OpenGL evaluators for Bezier
Curves
 Two dimensional evaluators to evaluate
Bernstein polynomials and to form Bezier
surfaces.

DEMO
RESOURCES
Official Website : http://www.opengl.org/
 SDK : http://www.opengl.org/sdk/
 Reference pages :
http://www.opengl.org/sdk/docs/man/
 GLUT :
http://www.opengl.org/resources/libraries/glut/
 Sample Projects at :
http://www.ziyoo.com/

Download