CS 432/680
INTERACTIVE COMPUTER GRAPHICS
Introduction to OpenGL
Week 1
David Breen
Department of Computer Science
Drexel University
Based on material from Ed Angel, University of New Mexico
Objectives
• Learn the basic design of a graphics
system
• Introduce graphics pipeline architecture
• Describe software components of an
interactive graphics system
2
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Image Formation
Revisited
• Can we mimic the synthetic camera model to
design graphics hardware and software?
• Application Programmer Interface (API)
– Need only specify
• Objects
• Materials
• Viewer
• Lights
• But how is the API implemented?
3
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Physical Approaches
• Ray tracing: follow rays of light from center
of projection until they either are absorbed by
objects or go off to infinity
– Can handle global effects
• Multiple reflections
• Translucent objects
– Slow
– Need whole data base
• Radiosity: Energy based
approach
– Very slow 4
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Practical Approach
• Process objects one at a time in the order
they are generated by the application
– Can consider only local lighting
• Pipeline architecture
application display
program
• All steps can be implemented in hardware on
the graphics card
5
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
The Programmer’s
Interface
• Programmer sees the graphics system
through an interface: the Application
Programmer Interface (API)
6
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
API Contents
• Functions that specify what we need to
form an image
– Objects
– Viewer
– Light Source(s)
– Materials
• Other information
– Input from devices such as mouse and
keyboard
– Capabilities of system
7
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Object Specification
• Most APIs support a limited set of primitives
including
– Points (1D object)
– Line segments (2D objects)
– Polygons (3D objects)
– Some curves and surfaces
• Quadrics
• Parametric polynomial
• All are defined through locations in space or
vertices
8
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Example
type of object
location of vertex
glBegin(GL_POLYGON)
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glEnd( );
end of object definition
9
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Camera Specification
• Six degrees of freedom
– Position of center of lens
– Orientation
• Lens
• Film size
• Orientation of film plane
10
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Lights and Materials
• Types of lights
– Point sources vs distributed sources
– Spot lights
– Near and far sources
– Color properties
• Material properties
– Absorption: color properties
– Scattering
• Diffuse
• Specular
11
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Following the Pipeline:
Transformations
• Much of the work in the pipeline is in
converting object representations from
one coordinate system to another
– World coordinates
– Camera coordinates
– Screen coordinates
• Every change of coordinates is
equivalent to a matrix transformation
12
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Clipping
• Just as a real camera cannot “see” the
whole world, the virtual camera can only
see part of the world space
– Objects that are not within this volume are
said to be clipped out of the scene
13
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Projection
• Must carry out the process that
combines the 3D viewer with the 3D
objects to produce the 2D image
– Perspective projections: all projectors meet
at the center of projection
– Parallel projection: projectors are parallel,
center of projection is replaced by a
direction of projection
14
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Rasterization
• If an object is visible in the image, the
appropriate pixels in the frame buffer must be
assigned colors
– Vertices assembled into objects
– Effects of lights and materials must be determined
– Polygons filled with interior colors/shades
– Must have also determine which objects are in
front (hidden surface removal)
15
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Programming with OpenGL
Part 1: Background
David Breen
Department of Computer Science
Drexel University
Objectives
• Development of the OpenGL API
• OpenGL Architecture
– OpenGL as a state machine
• Functions
– Types
– Formats
• Simple program
17
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Early History of APIs
• IFIPS (1973) formed two committees to come
up with a standard graphics API
– Graphical Kernel System (GKS)
• 2D but contained good workstation model
– Core
• Both 2D and 3D
– GKS adopted as IS0 and later ANSI standard
(1980s)
• GKS not easily extended to 3D (GKS-3D)
• Far behind hardware development
18
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
PHIGS and X
• Programmers Hierarchical Graphics System
(PHIGS)
– Arose from CAD community
– Database model with retained graphics
(structures)
• X Window System
– DEC/MIT effort
– Client-server architecture with graphics
• PEX combined the two
– Not easy to use (all the defects of each)
19
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
SGI and GL
• Silicon Graphics (SGI) revolutionized the
graphics workstation by implementing the
pipeline in hardware (1982)
• To use the system, application programmers
used a library called GL
• With GL, it was relatively simple to program
three dimensional interactive applications
20
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL
• GL’s success lead to OpenGL (1992),
a platform-independent API that was
– Easy to use
– Close enough to the hardware to get
excellent performance
– Focus on rendering
– Omitted windowing and input to avoid
window system dependencies
21
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL Evolution
• Controlled by an Architectural Review Board
(ARB)
– Members include SGI, Microsoft, Nvidia, HP,
3DLabs, IBM, ATI, Apple, Intel, …….
– Relatively stable (present version 2.1)
• Evolution reflects new hardware capabilities
– 3D texture mapping and texture objects
– Vertex programs
– Programmable shaders
– Allows for platform specific features through
extensions
22
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL Libraries
• OpenGL core library
– OpenGL32 on Windows
– GL on most unix/linux systems
• OpenGL Utility Library (GLU)
– Provides functionality in OpenGL core but avoids
having to rewrite code
• Links with window system
– GLX for X window systems
– WGL for Windows
– AGL for Macintosh
23
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
GLUT
• OpenGL Utility Library (GLUT)
– Provides functionality common to all window
systems
• Open a window
• Get input from mouse and keyboard
• Menus
• Event-driven
– Code is portable but GLUT lacks the functionality
of a good toolkit for a specific platform
• Slide bars
24
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Software Organization
application program
OpenGL Motif
widget or similar GLUT
GLX, AGL
or WGL GLU
X, Win32, Mac O/S GL
software and/or hardware
25
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL Architecture
Immediate Mode Geometric
pipeline
Per Vertex
Polynomial Operations &
Evaluator Primitive
Assembly
Display Per Fragment Frame
CPU List
Rasterization
Operations Buffer
Texture
Memory
Pixel
Operations
26
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL Functions
• Primitives
– Points
– Line Segments
– Polygons
• Attributes
• Transformations
– Viewing
– Modeling
• Control
• Input (GLUT)
27
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL State
• OpenGL is a state machine
• OpenGL functions are of two types
– Primitive generating
• Can cause output if primitive is visible
• How vertices are processed and appearance of
primitive are controlled by the state
– State changing
• Transformation functions
• Attribute functions
28
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Lack of Object
Orientation
• OpenGL is not object oriented so that
there are multiple functions for a given
logical function, e.g. glVertex3f,
glVertex2i, glVertex3dv,…..
• Underlying storage mode is the same
• Easy to create overloaded functions in
C++ but issue is efficiency
29
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL function format
function name
glVertex3f(x,y,z)
x,y,z are floats
belongs to GL library
glVertex3fv(p)
p is a pointer to an array
30
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL #defines
• Most constants are defined in the include files
gl.h, glu.h and glut.h
– Note #include <glut.h> should automatically
include the others
– Examples
– glBegin(GL_POLYGON)
– glClear(GL_COLOR_BUFFER_BIT)
• include files also define OpenGL data types:
Glfloat, Gldouble,….
31
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
A Simple Program
Generate a square on a solid background
32
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
simple.c
#include <glut.h>
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char** argv){
glutCreateWindow("simple");
glutDisplayFunc(mydisplay);
glutMainLoop();
} 33
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Event Loop
• Note that the program defines a display
callback function named mydisplay
– Every glut program must have a display callback
– The display callback is executed whenever
OpenGL decides the display must be refreshed,
for example when the window is opened
– The main function ends with the program entering
an event loop
34
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Defaults
• simple.c is too simple
• Makes heavy use of state variable
default values for
– Viewing
– Colors
– Window parameters
• Next version will make the defaults
more explicit
35
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Notes on compilation
• Unix/linux
– Include files usually in …/include/GL
– Compile with –lglut –lglu –lgl loader flags
– May have to add –L flag for X libraries
– Mesa implementation included with most
linux distributions
36
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Notes on compilation
• On tux
– #include <GL/glut.h>
– g++ *.cpp -L/usr/X11R6/lib -lGL -lglut -lGLU
37
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Compilation on Windows
• Visual C++
– Get glut.h, glut32.lib and glut32.dll from web
– Create a console application
– Add opengl32.lib, glut32.lib, glut32.lib to project
settings (under link tab)
• Borland C similar
• Cygwin (linux under Windows)
– Can use gcc and similar makefile to linux
– Use –lopengl32 –lglu32 –lglut32 flags
38
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Programming with OpenGL
Part 2: Complete Programs
David Breen
Department of Computer Science
Drexel University
Objectives
• Refine the first program
– Alter the default values
– Introduce a standard program structure
• Simple viewing
– Two-dimensional viewing as a special
case of three-dimensional viewing
• Fundamental OpenGL primitives
• Attributes
40
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Program Structure
• Most OpenGL programs have a similar structure that
consists of the following functions
– main():
• defines the callback functions
• opens one or more windows with the required properties
• enters event loop (last executable statement)
– init(): sets the state variables
• viewing
• Attributes
– callbacks
• Display function
• Input and window functions
41
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Simple.c revisited
• In this version, we will see the same
output but have defined all the relevant
state values through function calls with
the default values
• In particular, we set
– Colors
– Viewing conditions
– Window properties
42
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
main.c
#include <GL/glut.h> includes gl.h
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("simple");
glutDisplayFunc(mydisplay); define window properties
init(); display callback
glutMainLoop(); set OpenGL state
}
enter event loop
43
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
GLUT functions
• glutInit allows application to get command line
arguments and initializes system
• gluInitDisplayMode requests properties of the window
(the rendering context)
– RGB color
– Single buffering
– Properties logically ORed together
• glutWindowSize in pixels
• glutWindowPosition from top-left corner of display
• glutCreateWindow create window with title “simple”
• glutDisplayFunc display callback
• glutMainLoop enter infinite event loop
44
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
init.c
black clear color
void init() opaque window
{
glClearColor (0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
fill with white
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
viewing volume
45
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Coordinate Systems
• The units used in glVertex are
determined by the application and are
called world or problem coordinates
• The viewing specifications are also in
world coordinates and it is the size of the
viewing volume that determines what will
appear in the image
• Internally, OpenGL will convert to camera
coordinates and later to screen
coordinates
46
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL Camera
• OpenGL places a camera at the origin
pointing in the negative z direction
• The default viewing volume
is a box centered at the
origin with sides of
length 2
47
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Orthographic Viewing
In the default orthographic view, points are
projected along the z axis onto the plane z=0
z=0
z=0
48
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Transformations and
Viewing
• In OpenGL, the projection is carried out by a
projection matrix (transformation)
• There is only one set of transformation functions so
we must set the matrix mode first
glMatrixMode (GL_PROJECTION)
• Transformation functions are incremental so we start
with an identity matrix and alter it with a projection
matrix that gives the view volume
glLoadIdentity ();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
49
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Two- and three-dimensional
viewing
• In glOrtho(left, right, bottom, top,
near, far) the near and far distances are
measured from the camera
• Two-dimensional vertex commands place all
vertices in the plane z=0
• If the application is in two dimensions, we can use
the function
gluOrtho2D(left, right,bottom,top)
• In two dimensions, the view or clipping volume
becomes a clipping window
50
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
mydisplay.c
void mydisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
51
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
OpenGL Primitives
GL_POINTS GL_POLYGON
GL_LINES GL_LINE_STRIP
GL_LINE_LOOP
GL_TRIANGLES
GL_QUAD_STRIP
GL_TRIANGLE_STRIP GL_TRIANGLE_FAN
52
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Polygon Issues
• OpenGL will only display polygons correctly that
are
– Simple: edges cannot cross
– Convex: All points on line segment between
two points in a polygon are also in the polygon
– Flat: all vertices are in the same plane
• User program must check if above true
• Triangles satisfy all conditions
nonsimple polygon nonconvex polygon
53
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Text
• Not an OpenGL primitive
• Fonts provides by windowing system are
not portable
• GLUT has some bitmap and stroke fonts
– glutBitmapCharacter(void *font, int char)
– glutBitmapCharacter(void *font, int char)
54
GLUT Bitmap Text
• glutBitmapCharacter(void *font, int char)
– Displays char at current raster position
• glRasterPos[23][sifd](TYPE x, TYPE y,
TYPE z)
– Sets raster position by transforming world
coordinate point into screen coordinates
• Current raster position is automatically
incremented after char is displayed
• Example (10 pt times roman)
– glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10,
‘a’)
55
GLUT Stroke Text
• glutStrokeCharacter(void *font, int char)
– Displays char at current world location
mapped to screen
• Stroke text is geometry that is modified by
modeling transformations
• Each character is approximately 100 x 100
in world coordinates
• Example (roman)
– glutStrokeCharacter(GLUT_STROKE_ROMAN, ‘a’)
56
Attributes
• Attributes are part of the OpenGL state
and determine the appearance of objects
– Color (points, lines, polygons)
– Size and width (points, lines)
– Stipple pattern (lines, polygons)
– Polygon mode
• Display as filled: solid color or stipple pattern
• Display edges
58
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
RGB color
• Each color component stored separately in
the frame buffer
• Usually 8 bits per component in buffer
• Note in glColor3f the color values range
from 0.0 (none) to 1.0 (all), while in
glColor3ub the values range from 0 to 255
59
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Indexed Color
• Colors are indices into tables of RGB
values
• Requires less memory
– indices usually 8 bits
– not as important now
• Memory inexpensive
• Need more colors for shading
60
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Color and State
• The color as set by glColor becomes part of the state
and will be used until changed
– Colors and other attributes are not part of the object
but are assigned when the object is rendered
• We can create conceptual vertex colors by code such
as
glColor
glVertex
glColor
glVertex
61
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Smooth Color
• Default is smooth shading
– OpenGL interpolates vertex colors across visible
polygons
• Alternative is flat shading
– Color of first vertex
determines fill color
• glShadeModel
(GL_SMOOTH)
or GL_FLAT
62
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002
Viewports
• Do not have to use the entire window
for the image: glViewport(x,y,w,h)
• Values in pixels (screen coordinates)
63
Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002