0% found this document useful (0 votes)
32 views62 pages

Lecture 1

Uploaded by

shrutinimbekar05
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views62 pages

Lecture 1

Uploaded by

shrutinimbekar05
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

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

You might also like