using opengl. 2 what is opengl? a software interface to graphics hardware it is a graphics rendering...

39
Using OpenGL

Upload: margaretmargaret-bond

Post on 28-Dec-2015

240 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

Using OpenGL

Page 2: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

2

What is OpenGL?

• A software interface to graphics hardware • It is a Graphics Rendering API (Application

Programmer’s Interface) that is a set of function with well defined interface.

• OpenGL is intended for use with computer hardware that is designed and optimized for the display and manipulation of 3D graphics.

• Software-only implementations of OpenGL are also possible (MESA)

2

Page 3: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

A History of OpenGL

• Was SGI’s Iris GL – basis for “Open”GL• “Open” standard allowing for wide range

hardware platforms• OpenGL v1.0 (1992)• OpenGL v1.1 (1995)• OpenGL v1.5

• “Mesa” – an Open source implementation of OpenGL (http://www.mesa3d.org)

Page 4: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

4

The OpenGL ARB

• OpenGL Architecture Review Board (ARB)– Control license and conformance test of OpenGL

• The Khronos Group(after 2006) is industry consortium focused on the creation and maintenance of open media standards. Most ARB members are already members of Khronos.

• A vendor who wants to create and market an OpenGL implementation must first license OpenGL from The Khronos Group.

Page 5: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

5

Useful Websites and Books

• Official Sitehttp://www.opengl.org

• Non official sites– http://nehe.gamedev.net/

• BOOKS – OpenGL Red Book & – OpenGL Blue Book

5

Page 6: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

6

Useful Links

• Online Reference manual sites

• GL and GLUhttp://www.mevis.de/~uwe/opengl/opengl.html

• GLUThttp://pyopengl.sourceforge.net/documentation/manual/reference-

GLUT.html

6

Page 7: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

7

OpenGL API Functions

• OpenGL contains over 200 functions – Primitive functions : define the elements (eg. A

point, line, polygon, etc)

– Attribute functions : control the appearance of primitives (eg. colors, line types, light source, textures.)

– Viewing functions : determine the properties of camera. Transformation

– Windowing functions: not part of core OpenGL

– Other functions

7

Page 8: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

8

Window Management

• OpenGL is meant to be platform independent. i.e. OpenGL is window and operating system independent.

• OpenGL does not include any functions for window management, user interaction, and file I/O.

• Host environment is responsible for window management.

8

Page 9: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

9

Related APIs

• GL– “core” library of OpenGL that is platform independent

• GLU (OpenGL Utility Library)– part of OpenGL

– an auxiliary library that handles a variety of graphics accessory functions

– NURBS, tessellators, quadric shapes, etc.

• AGL, GLX, WGL– glue between OpenGL and windowing systems

• GLUT (OpenGL Utility Toolkit)– utility toolkits that handle window managements – portable windowing API– not officially part of OpenGL

Page 10: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

OpenGL API Hierarchy

GLUT, JOGL

GLU

GL

GLX, AGLor WGL

X, Win32, Mac O/S Java Virtual Machine

software and/or hardware

application program

OpenGL Motifwidget or similar

Page 11: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

Programming Convention : OpenGL Function Naming

OpenGL functions all follow a naming convention that tells you which library the function is from, and how many and what type of arguments that the function takes

<Library prefix><Root command><Argument count><Argument type>

Page 12: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

Programming Convention : OpenGL Function Naming

glVertex3fv( v )

Number ofcomponents

2 - (x,y) 3 - (x,y,z)4 - (x,y,z,w)

Data Typeb - byteub - unsigned bytes - shortus - unsigned shorti - intui - unsigned intf - floatd - double

Vector

omit “v” forscalar form

glVertex2f( x, y )

Page 13: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

13

Programming Convention : OpenGL Function Naming

• Multiple forms of OpenGL functions to support the variety of data types– glVertex3i(ix, iy, iz)– glVertex3f(x, y, z)– glVertex2i(ix, iy)– glVertex2f(x, y)– ..– We shall use the notation glVertex*() to

refer to all the forms of the vertex function13

Page 14: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

14

OpenGL Data Type Internal Representation

Literal Suffix

GLbyte 8-bit integer b

GLshort 16-bit integer s

GLint, GLsizei 32-bit integer i

GLfloat, GLclampf 32-bit floating point f

GLdouble, GLclampd 64-bit floating point d

GLubyte, GLboolean 8-bit unsigned integer

ub

GLushort 16bit unsigned integer

us

GLuint, GLenum, GLbitfield

32bit unsigned integer

ui

Page 15: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

15

General Structure of an OpenGL Program

Configure and open a

window Initialize OpenGL’s

state Process user events

Draw an image

Page 16: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

16

2D Geometric Primitives

• Primitives – fundamental entities such as point and polygons

• Basic types of geometric primitives– Points– Line segments– Polygons

16

Page 17: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

17

2D Geometric Primitives

17

GL_POINTS GL_LINES GL_LINE_STRIP

GL_LINE_LOOP

GL_POLYGON

GL_QUADS GL_TRIANGLES

GL_TRIANGLE_FAN

All geometric primitives are specified by vertices

Page 18: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

18

Geometry Commands

• glBegin(GLenum type)

marks the beginning of a vertex-data list that describes a geometric primitives

18

• glEnd (void)

marks the end of a vertex-data list

• glVertex*(…)

specifies vertex for describing a geometric object

Page 19: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

19

Specifying Geometric Primitives

glBegin( type ); glVertex*(…); …… glVertex*(…);glEnd();

19

type determines how vertices are combined

Page 20: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

20

Types

Page 21: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

21

TypesGL_POINTSGL_LINES : each successive pair for a ling segmentGL_LINE_STRIP: vertices defining a sequence of line segmentsGL_LINE_LOOP: GL_LINE_STRIP + the last vertex connects to

the firstGL_POLYGON : sequence of vertices of polygon, filledGL_QUADS: each successive group of four vertices for a

quadrilateralsGL_TRIANGLES: each successive group of three vertices for a

triangleGL_TRIANGLE_FAN: first three vertices for the first triangle

and each subsequent vertex with the first vertex and the previous vertex for the next triangle

21

Page 22: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

22

Example

22

void drawSquare (){ glClear(GL_COLOR_BUFFER_BIT); 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 }

Page 23: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

23

Winding

• glFrontFace(GL_CCW);

Page 24: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

24

Triangle Strips

• When drawing several connected triangles, you can save a lot of time by drawing a strip of connected triangles

• The pattern is V0, V1, V2; then V2, V1, V3; then V2, V3, V4; and so on.

Page 25: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

25

Triangle Fans

• Produce a group of connected triangles that fan around a central point

• The first vertex, V0, forms the origin of the fan.• After the first three vertices are used to draw the

initial triangle, all subsequent vertices are used with the origin (V0) and the vertex immediately preceding it (Vn–1) to form the next triangle.

Page 26: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

26

How OpenGL Works:The Conceptual Model

Configurehow OpenGLshould draw

stuff

Draw stuff

Page 27: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

27

Controlling OpenGL’s Drawing

• Set OpenGL’s rendering state– State controls how things are drawn

•shading – lighting•texture maps – line styles

(stipples)•polygon patterns – transparency

Page 28: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

28

The Power of Setting OpenGL State

Appearance is controlled by setting OpenGL’s state.

Page 29: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

29

Setting OpenGL State

• Three ways to set OpenGL state:1. Set values to be used for processing

vertices• most common methods of setting state

– glColor() / glIndex()– glNormal()– glTexCoord()

• state must be set before calling glVertex()

Page 30: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

30

Setting OpenGL State (cont’d.)

2.2. Turning on a rendering modeTurning on a rendering modeglEnable() / glDisable()

3.3. Configuring the specifics of a particular Configuring the specifics of a particular rendering moderendering mode• Each mode has unique commands for setting its

values

glMaterialfv()

Page 31: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

31

OpenGL Color

• There are two color models in OpenGL– RGB Color (True Color)– Indexed Color (Color map)

• Colors are specified as floating-pointnumbers in the range [ 0.0, 1.0 ]

31

Page 32: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

32

RGB Color Model

32

•R, G, B components are stored for each pixel

Page 33: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

33

How Many Colors?

Color number =

33

For example:

4-bit color

= 16 colors

8-bit color

= 256 colors

24-bit color

= 16.77 million colors

hcolor_dept2

42

82

242

Page 34: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

34

How Much Memory?

Buffer size = width * height *color depth

34

For example:

If width = 640, height = 480, color depth = 24 bits

Buffer size = (640 * 480 * 2) bytes

If width = 640, height = 480, color depth = 32 bits

Buffer size = (640 * 480 * 4) bytes

Page 35: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

35

Alpha Component

Alpha value A value indicating the pixels opacity 0 usually represents totally transparent and

the 1 represents completely opaque

Alpha buffer Hold the alpha value for every pixel Alpha values are commonly represented in 8

bits, in which case transparent to opaque ranges from 0 to 255

35

Page 36: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

36

RGB Color Commands

• glColor*(…)

specifies vertex colors

36

• glClearColor(r, g, b, a)

sets current color for cleaning color buffer

Page 37: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

37

Example

37

void drawLine (GLfloat *color){ glColor3fv ( color ); glBegin(GL_LINE); glVertex2f ( 0.0, 0.0 ); glVertex2f ( 1.0, 0.0 ); glEnd();}

Page 38: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

38

Example

38

void drawLine (GLfloat *color){ glBegin(GL_LINE);

glColor3f(1.0,0.0,0.0 ); glVertex2f ( 0.0, 0.0 );

glColor3f(0.0,0.0,1.0);

glVertex2f ( 1.0, 0.0 ); glEnd();}

Page 39: Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is

39

Color Interpolation

glShadeModel(GL_SMOOTH);

OrglShadeModel(GL_FLAT); - the last

vertex color

• Linear interpolation for a line• Bilinear interpolation for a polygons

39