Вы находитесь на странице: 1из 50

***

MCA 401A - Computer Graphics, Dept of Computer Sc, M U 1


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

2 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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)

3 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


SGI and GL
 Silicon Graphics (SGI) revolutionized the graphics workstation by
implementing the pipeline in hardware (1982)
 To access the system, application programmers used a library called GL
 With GL, it was relatively simple to program three dimensional interactive
applications

4 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL
The success of GL 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

5 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL Evolution

 Originally controlled by an Architectural Review Board (ARB)


 Members included SGI, Microsoft, Nvidia, HP, 3DLabs, IBM,…….
 Relatively stable (present version 2.1)
 Evolution reflects new hardware capabilities
 3D texture mapping and texture objects

 Vertex programs

 Allows for platform specific features through extensions


 ARB replaced by Kronos

6 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL Libraries
 OpenGL core library
 OpenGL32 on Windows
 GL on most unix/linux systems (libGL.a)
 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

7 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


GLUT
 OpenGL Utility Toolkit (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
 No slide bars

8 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Software Organization

 application program

OpenGL Motif GLUT


widget or similar
GLX, AGL
GLU
or WGL

X, Win32, Mac O/S GL

software and/or hardware

9 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL Architecture
geometry
Immediate Mode
pipeline

Per Vertex
Polynomial Operations &
Evaluator Primitive
Assembly

Display Per Fragment Frame


CPU List
Rasterization
Operations Buffer

Texture
Memory
Pixel
Operations
10 MCA 401A - Computer Graphics, Dept of Computer Sc, M U
OpenGL Functions
 Primitives
 Points
 Line Segments
 Polygons
 Attributes
 Transformations
 Viewing
 Modeling
 Control (GLUT)
 Input (GLUT)
 Query

11 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL Functions: Primitives
 Primitive f unctions defined low-level objects or atomic entitiesthat the
system can display.

 OpenGL supports two classes of primitives :


(i). Geometric primitives –they pass through the geometric pipeline.
(ii). Image or Raster primitives (arrays of pixels) - passes through a
separate pipeline to the frame buffer

 Basic geometric primitives are specified by sets of vertices.


 Points
 Line Segments
 Polygons

12 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

13 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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 can check if above true


 OpenGL will produce output if these conditions are violated but it may not be what is
desired
 Triangles satisfy all conditions

nonconvex polygon
nonsimple polygon
14 MCA 401A - Computer Graphics, Dept of Computer Sc, M U
Text
Two forms of texts:
(i). Stroke text –Like any other geometric objects, vertices are used
to define line segments and curves that form the outline of each
character.
(ii). Raster text – Characters are defined as rectangles of bits called
bit blocks. Each block defines a single character by patterns of 0
and 1 bits in the block.

 A raster character (entire block ) can be placed in the frame buffer


rapidly by a bit-block-transfer( bitblt ) operation.

15 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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
 Display vertices

16 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


RGB color

 Each color component is 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),
whereas in glColor3ub the values range from 0 to 255

17 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

18 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

19 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


RGBA Color System
 This has 4 arguments RGB and alpha
 alpha - Opacity
 glClearColor (1.0, 1.0, 1.0, 1.0)
 This would render the window since all components are all 1.0 and
opaque as alpha is set to 1.0.

20 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

21 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Setting of Color Attributes

 glClearColor(1.0, 1.0, 1.0, 1.0); clear to white


 glColor3f(1.0,0.0,0.0); set color state variable to red

 glPointSize(2.0); two-pixel width

22 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Control functions (interaction with windows)
 Windows - a rectangular area of the display
 Modern systems allow many windows to be displayed (multiwindow
environment)
 The position of the window is with reference to the origin. The origin
(0,0) is top left corner of the screen.

23 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


GLUT functions
 glutInit allows application to get command line arguments and initializes
system
 gluInitDisplayMode requests properties for 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

24 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

25 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Lack of Object Orientation
 OpenGL is not object oriented so that there are multiple functions for a
given logical function
 glVertex3f
 glVertex2i
 glVertex3dv
 Underlying storage mode is the same
 Easy to create overloaded functions in C++ but issue is efficiency

26 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL function format
function name
dimensions

glVertex3f(x,y,z)

x,y,z are floats


belongs to GL library

glVertex3fv(p)

p is a pointer to an array

27 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL #defines
 Most constants are defined in the include files gl.h, glu.h and glut.h
 Note #include <GL/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,….

28 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


A Simple Program
Generate a square on a solid background

29 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


simple.c
#include <GL/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();
}
30 MCA 401A - Computer Graphics, Dept of Computer Sc, M U
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

31 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

32 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Notes on compilation
 See website and ftp for examples
 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
 Check web for latest versions of Mesa and glut

33 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

34 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

35 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Control functions (interaction with windows)
 Windows - a rectangual area of the display
 Modern systems allow many windows to be displayed (multiwindow
environment)
 The position of the window is with reference to the origin. The origin
(0,0) is top left corner of the screen.

36 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


GLUT functions
 glutInit allows application to get command line arguments and initializes
system
 gluInitDisplayMode requests properties for 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

37 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


simple.c revisited
 In this version, we shall see the same output but we have defined all the
relevant state values through function calls using the default values
 In particular, we set
 Colors
 Viewing conditions
 Window properties

38 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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"); define window properties
glutDisplayFunc(mydisplay);
display callback
init(); set OpenGL state

glutMainLoop();
} enter event loop

39 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


init.c
black clear color
opaque window
void init()
{
glClearColor (0.0, 0.0, 0.0, 1.0);
fill/draw with white
glColor3f(1.0, 1.0, 1.0);

glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
viewing volume

40 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Coordinate Systems
 The units in glVertex are determined by the application and are
called object or problem coordinates
 The viewing specifications are also in object coordinates and it is the
size of the viewing volume that determines what will appear in the
image
 Internally, OpenGL will convert to camera (eye) coordinates and later
to screen coordinates
 OpenGL also uses some internal representations that usually are not
visible to the application

41 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL Camera

 OpenGL places a camera at the origin in object space pointing in the


negative z direction
 The default viewing volume
is a box centered at the
origin with a side of
length 2

42 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


OpenGL Functions: Viewing
 The default viewing conditions in computer image formation are
similar to the settings on a basic camera with a fixed lens.
 The orthographic view
 When image plane is fixed and the camera is moved far from the
plane, the projectors bocome parallel and COP becomes
direction of projection.

43 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Orthographic Viewing
In the default orthographic view, points are projected
forward along the z axis onto the plane z=0

z=0

z=0

44 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Transformations and Viewing
 The pipeline architectue depends on multiplying together a n0. of
transformation matrices to achieve the desired image of a primitive.
 Two important matrices: Model view and projection.
 The values of these matrices are part of the state of the system.
 In OpenGL, 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);

45 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

46 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


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

47 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Aspect Ratio and Viewport

 Aspect ratio is the ratio of width to height of a particular ogject.


 Wemay ogtain undisirable output if the aspect ration of the viewing rectangle
(specified by glOrtho) is not same as the aspect ration of the window (specified
by glutInitWindowSize )
 Viewport – A rectangular area of the display window whose height and width
can be adjusted to match that of the clipping window, to avoid distortion of the
image.

48 MCA 401A - Computer Graphics, Dept of Computer Sc, M U


Viewports
 Do not have use the entire window for the image:
glViewport(x,y,w,h)
 Values in pixels (screen coordinates)

49 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009


REFERENCE

1. Edward Angel, Interactive Computer Graphics - A top-Down


Approach Using OpenGL,5E , Pearson 2013.

2. D Hearn and P Backer, Computer Graphics, Pearson 2004.

MCA 401A - Computer Graphics, Dept of Computer Sc, M U 50

Вам также может понравиться