1 / 81

# - PowerPoint PPT Presentation

CIS 636 Introduction to Computer Graphics CG Basics 5 of 8: OpenGL Primer, Part 2 of 3 William H. Hsu Department of Computing and Information Sciences, KSU KSOL course pages: http://snipurl.com/1y5gc Course web site: http://www.kddresearch.org/Courses/CIS636

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about '' - paul

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

CIS 636Introduction to Computer Graphics

CG Basics 5 of 8:

OpenGL Primer, Part 2 of 3

William H. Hsu

Department of Computing and Information Sciences, KSU

KSOL course pages: http://snipurl.com/1y5gc

Course web site: http://www.kddresearch.org/Courses/CIS636

All slides from SIGGRAPH 2000 tutorial on OpenGL, Shreiner, Angel, Shreiner: http://www.cs.unm.edu/~angel/SIGGRAPH/

Sections 2.6, 3.1, 20.3 – 20.13, Eberly 2e – see http://snurl.com/1ye72

NeHe tutorials: 6 – 10, http://nehe.gamedev.net

Article: http://www.kuro5hin.org/story/2003/10/28/9853/1617

CIS 636/736: (Introduction to) Computer Graphics

• Four More Short OpenGL Tutorials from SIGGRAPH 2000

• Vicki Shreiner: Animation and Depth Buffering

• Double buffering

• Illumination: light positioning, light models, attenuation

• Material properties

• Animation basics in OpenGL

• Vicki Shreiner: Imaging and Raster Primitives

• Ed Angel: Texture Mapping

• Display lists and vertex arrays

• Accumulation buffer

• Fog

• Stencil buffering

• Fragment programs (to be concluded in Tutorial 3)

CIS 636/736: (Introduction to) Computer Graphics

### Animation and Depth Buffering

Vicki Shreiner

CIS 636/736: (Introduction to) Computer Graphics

• Double buffering and animation

• Using depth buffer

• Hidden surface removal

• aka visible surface determination

CIS 636/736: (Introduction to) Computer Graphics

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

1

1

2

2

4

4

Front

Buffer

Back

Buffer

8

8

16

16

Display

Double Buffering

CIS 636/736: (Introduction to) Computer Graphics

• Request a double buffered color buffer

glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );

• Clear color buffer

glClear( GL_COLOR_BUFFER_BIT );

• Render scene

• Request swap of front and back buffers

glutSwapBuffers();

• Repeat steps 2 - 4 for animation

CIS 636/736: (Introduction to) Computer Graphics

Depth Buffering andHidden Surface Removal

1

1

2

2

4

4

Color

Buffer

Depth

Buffer

8

8

16

16

Display

CIS 636/736: (Introduction to) Computer Graphics

• Request a depth buffer

glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );

• Enable depth buffering

glEnable( GL_DEPTH_TEST );

• Clear color and depth buffers

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

• Render scene

• Swap color buffers

CIS 636/736: (Introduction to) Computer Graphics

void main( int argc, char** argv )

{

glutInit( &argc, argv );

glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );

glutCreateWindow( “Tetrahedron” );

init();

glutIdleFunc( idle );

glutDisplayFunc( display );

glutMainLoop();

}

CIS 636/736: (Introduction to) Computer Graphics

void init( void ){ glClearColor( 0.0, 0.0, 1.0, 1.0 );}void idle( void ){ glutPostRedisplay();}

CIS 636/736: (Introduction to) Computer Graphics

void drawScene( void )

{

GLfloat vertices[] = { … };

GLfloat colors[] = { … };

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glBegin( GL_TRIANGLE_STRIP );

/* calls to glColor*() and glVertex*() */

glEnd();

glutSwapBuffers();

}

CIS 636/736: (Introduction to) Computer Graphics

### Lighting

Dave Shreiner

CIS 636/736: (Introduction to) Computer Graphics

• Lighting simulates how objects reflect light

• material composition of object

• light’s color and position

• global lighting parameters

• ambient light

• two sided lighting

• available in both color indexand RGBA mode

CIS 636/736: (Introduction to) Computer Graphics

• Phong lighting model

• Computed at vertices

• Lighting contributors

• Surface material properties

• Light properties

• Lighting model properties

CIS 636/736: (Introduction to) Computer Graphics

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Surface Normals

• Normals define how a surface reflects light

glNormal3f( x, y, z )

• Current normal is used to compute vertex’s color

• Use unit normals for proper lighting

• scaling affects a normal’s length

glEnable( GL_NORMALIZE )orglEnable( GL_RESCALE_NORMAL )

CIS 636/736: (Introduction to) Computer Graphics

• Define the surface properties of a primitive

glMaterialfv( face, property, value );

• separate materials for front and back

CIS 636/736: (Introduction to) Computer Graphics

glLightfv( light, property, value );

• light specifies which light

• multiple lights, starting with GL_LIGHT0

glGetIntegerv( GL_MAX_LIGHTS, &n );

• properties

• colors

• position and type

• attenuation

CIS 636/736: (Introduction to) Computer Graphics

• Light color properties

• GL_AMBIENT

• GL_DIFFUSE

• GL_SPECULAR

CIS 636/736: (Introduction to) Computer Graphics

• OpenGL supports two types of Lights

• Local (Point) light sources

• Infinite (Directional) light sources

• Type of light controlled by w coordinate

CIS 636/736: (Introduction to) Computer Graphics

• Flip each light’s switch

glEnable( GL_LIGHTn );

• Turn on power

glEnable( GL_LIGHTING );

CIS 636/736: (Introduction to) Computer Graphics

CIS 636/736: (Introduction to) Computer Graphics

• Modelview matrix affects a light’s position

• Different effects based on whenposition is specified

• eye coordinates

• world coordinates

• model coordinates

• Push and pop matrices to uniquely control a light’s position

CIS 636/736: (Introduction to) Computer Graphics

CIS 636/736: (Introduction to) Computer Graphics

• Spotlights

• localize lighting affects

• GL_SPOT_DIRECTION

• GL_SPOT_CUTOFF

• GL_SPOT_EXPONENT

CIS 636/736: (Introduction to) Computer Graphics

• Light attenuation

• decrease light intensity with distance

• GL_CONSTANT_ATTENUATION

• GL_LINEAR_ATTENUATION

CIS 636/736: (Introduction to) Computer Graphics

glLightModelfv( property, value );

• Enabling two sided lighting

GL_LIGHT_MODEL_TWO_SIDE

• Global ambient color

GL_LIGHT_MODEL_AMBIENT

• Local viewer mode

GL_LIGHT_MODEL_LOCAL_VIEWER

• Separate specular color

GL_LIGHT_MODEL_COLOR_CONTROL

CIS 636/736: (Introduction to) Computer Graphics

• Recall lighting computed only at vertices

• model tessellation heavily affects lighting results

• better results but more geometry to process

• Use a single infinite light for fastest lighting

• minimal computation per vertex

CIS 636/736: (Introduction to) Computer Graphics

### Imaging and Raster Primitives

Vicki Shreiner

CIS 636/736: (Introduction to) Computer Graphics

• Describe OpenGL’s raster primitives: bitmaps and image rectangles

• Demonstrate how to get OpenGL to read and render pixel rectangles

CIS 636/736: (Introduction to) Computer Graphics

• Bitmaps

• 2D array of bit masks for pixels

• update pixel color based on current color

• Images

• 2D array of pixel color information

• complete color information for each pixel

• OpenGL doesn’t understand image formats

CIS 636/736: (Introduction to) Computer Graphics

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Pixel Pipeline

• Programmable pixel storage and transfer operations

glBitmap(), glDrawPixels()

Rasterization

(including

Pixel Zoom)

Pixel

Storage

Modes

Pixel-Transfer

Operations

(and Pixel Map)

Per FragmentOperations

FrameBuffer

CPU

glCopyTex*Image();

TextureMemory

CIS 636/736: (Introduction to) Computer Graphics

glRasterPos3f( x, y, z )

• raster position transformed like geometry

• discarded if raster position isoutside of viewport

• may need to fine tuneviewport for desired results

Raster Position

CIS 636/736: (Introduction to) Computer Graphics

yorig

width

xorig

xmove

Rendering Bitmaps

glBitmap( width, height, xorig, yorig, xmove, ymove, bitmap )

• render bitmap in current colorat

• advance raster position by after rendering

CIS 636/736: (Introduction to) Computer Graphics

• OpenGL uses bitmaps for font rendering

• each character stored in display list containing bitmap

• window system specific routines to access system fonts

• glXUseXFont()

• wglUseFontBitmaps()

CIS 636/736: (Introduction to) Computer Graphics

glDrawPixels( width, height, format, type, pixels )

• render pixels with lower left ofimage at current raster position

• numerous formats and data typesfor specifying storage in memory

• best performance by using format and type that matches hardware

CIS 636/736: (Introduction to) Computer Graphics

glReadPixels( x, y, width, height, format, type, pixels )

• read pixels from specified (x,y) position in framebuffer

• pixels automatically converted from framebuffer format into requested format and type

• Framebuffer pixel copy

glCopyPixels( x, y, width, height, type )

• CIS 636/736: (Introduction to) Computer Graphics

RasterPosition

glPixelZoom(1.0, -1.0);

Pixel Zoom

glPixelZoom( x, y )

• expand, shrink or reflect pixelsaround current raster position

• fractional zoom supported

CIS 636/736: (Introduction to) Computer Graphics

• Storage modes control accessing memory

• byte alignment in host memory

• extracting a subimage

• Transfer modes allow modify pixel values

• scale and bias pixel component values

• replace colors using pixel maps

CIS 636/736: (Introduction to) Computer Graphics

### Texture Mapping

Ed Angel

CIS 636/736: (Introduction to) Computer Graphics

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Texture Mapping

• Apply 1-D, 2-D, or 3-D image to geometric primitives

• Uses of Texturing

• simulating materials

• reducing geometric complexity

• image warping

• reflections

CIS 636/736: (Introduction to) Computer Graphics

z

x

t

s

Texture Mapping

screen

geometry

image

CIS 636/736: (Introduction to) Computer Graphics

Images and geometry flow through separate pipelines that join at the rasterizer

“complex” textures do not affect geometric complexity

geometry pipeline

vertices

rasterizer

image

pixel pipeline

Texture Mapping andOpenGL Pipeline

CIS 636/736: (Introduction to) Computer Graphics

Texture Example join at the rasterizer

• The texture (below) is a 256 x 256 image that has beenmapped to a rectangularpolygon which is viewed inperspective

CIS 636/736: (Introduction to) Computer Graphics

Applying Textures [1] join at the rasterizer

• Three steps

• specify texture

• assign to texture

• assign texture coordinates to vertices

• specify texture parameters

• wrapping, filtering

CIS 636/736: (Introduction to) Computer Graphics

Applying Textures [2] join at the rasterizer

• specify textures in texture objects

• set texture filter

• set texture function

• set texture wrap mode

• set optional perspective correction hint

• bind texture object

• enable texturing

• supply texture coordinates for vertex

• coordinates can also be generated

CIS 636/736: (Introduction to) Computer Graphics

Texture Objects [1] join at the rasterizer

• Like display lists for texture images

• one image per texture object

• may be shared by several graphics contexts

• Generate texture names

glGenTextures(n,*texIds );

CIS 636/736: (Introduction to) Computer Graphics

Texture Objects [2] join at the rasterizer

• Create texture objects with texture data and state

glBindTexture( target, id );

• Bind textures before using

glBindTexture( target, id );

CIS 636/736: (Introduction to) Computer Graphics

Per join at the rasterizer

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Specify Texture Image

• Define a texture image from array of texels in CPU memory

glTexImage2D( target, level, components, w, h, border, format, type, *texels );

• dimensions of image must be powers of 2

• Texel colors are processed by pixel pipeline

• pixel scales, biases and lookups can bedone

CIS 636/736: (Introduction to) Computer Graphics

Converting Texture Images join at the rasterizer

• If dimensions of image are not power of 2

gluScaleImage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type_out, *data_out );

• *_in is for source image

• *_out is for destination image

• Image interpolated and filtered during scaling

CIS 636/736: (Introduction to) Computer Graphics

Specifying Textures: join at the rasterizerOther Methods

• Use frame buffer as source of texture image

• uses current buffer assource image

glCopyTexImage2D(...)

glCopyTexImage1D(...)

• Modify part of a defined texture

glTexSubImage2D(...)

glTexSubImage1D(...)

• Do both with glCopyTexSubImage2D(...), etc.

CIS 636/736: (Introduction to) Computer Graphics

Per join at the rasterizer

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Texture Space

Object Space

t

1, 1

(s, t) = (0.2, 0.8)

A

a

c

(0.4, 0.2)

b

B

C

(0.8, 0.4)

s

0, 0

1, 0

Mapping aTexture

• Based on parametric texture coordinates

• glTexCoord*() specified at each vertex

0, 1

CIS 636/736: (Introduction to) Computer Graphics

Generating Texture Coordinates join at the rasterizer

• Automatically generate texture coords

glTexGen{ifd}[v]()

• specify a plane

• generate texture coordinates based upon distance from plane

• generation modes

• GL_OBJECT_LINEAR

• GL_EYE_LINEAR

• GL_SPHERE_MAP

CIS 636/736: (Introduction to) Computer Graphics

Tutorial: Texture join at the rasterizer

CIS 636/736: (Introduction to) Computer Graphics

Texture Application Methods join at the rasterizer

• Filter Modes

• minification or magnification

• special mipmap minification filters

• Wrap Modes

• clamping or repeating

• Texture Functions

• how to mix primitive’s color with texture’s color

• blend, modulate or replace texels

CIS 636/736: (Introduction to) Computer Graphics

Filter Modes join at the rasterizer

Example:

glTexParameteri( target, type, mode );

Texture

Polygon

Texture

Polygon

Magnification

Minification

CIS 636/736: (Introduction to) Computer Graphics

Mipmapped Textures join at the rasterizer

• Mipmap allows for prefiltered texture maps of decreasing resolutions

• Lessens interpolation errors for smaller textured objects

• Declare mipmap level during texture definition

glTexImage*D( GL_TEXTURE_*D, level, … )

• GLU mipmap builder routines

gluBuild*DMipmaps( … )

• OpenGL 1.2 introduces advanced LOD controls

CIS 636/736: (Introduction to) Computer Graphics

Wrapping Mode join at the rasterizer

• Example:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )

t

s

GL_REPEAT

wrapping

GL_CLAMP

wrapping

texture

CIS 636/736: (Introduction to) Computer Graphics

Texture Functions join at the rasterizer

• Controls how texture is applied

glTexEnv{fi}[v]( GL_TEXTURE_ENV, prop, param )

• GL_TEXTURE_ENV_MODE modes

• GL_MODULATE

• GL_BLEND

• GL_REPLACE

• Set blend color with GL_TEXTURE_ENV_COLOR

CIS 636/736: (Introduction to) Computer Graphics

Perspective Correction Hint join at the rasterizer

• Texture coordinate and color interpolation

• either linearly in screen space

• or using depth/perspective values (slower)

• Noticeable for polygons “on edge”

glHint( GL_PERSPECTIVE_CORRECTION_HINT, hint )

where hint is one of

• GL_DONT_CARE

• GL_NICEST

• GL_FASTEST

CIS 636/736: (Introduction to) Computer Graphics

Is There Room for a Texture? join at the rasterizer

• Query largest dimension of texture image

• typically largest square texture

• doesn’t consider internal format size

glGetIntegerv( GL_MAX_TEXTURE_SIZE, &size )

• Texture proxy

• will memory accommodate requested texture size?

• no image specified; placeholder

• if texture won’t fit, texture state variables set to 0

• doesn’t know about other textures

• only considers whether this one texture will fit all of memory

CIS 636/736: (Introduction to) Computer Graphics

Texture Residency join at the rasterizer

• Working set of textures

• high-performance, usually hardware accelerated

• textures must be in texture objects

• a texture in the working set is resident

• for residency of current texture, check GL_TEXTURE_RESIDENT state

• If too many textures, not all are resident

• can set priority to have some kicked out first

• establish 0.0 to 1.0 priorities for texture objects

CIS 636/736: (Introduction to) Computer Graphics

### Advanced OpenGL Topics join at the rasterizer

Dave Shreiner

CIS 636/736: (Introduction to) Computer Graphics

Advanced OpenGL Topics join at the rasterizer

• Display Lists and Vertex Arrays

• Alpha Blending and Antialiasing

• Using the Accumulation Buffer

• Fog

• Feedback & Selection

• Fragment Tests and Operations

• Using the Stencil Buffer

CIS 636/736: (Introduction to) Computer Graphics

Rendering: join at the rasterizer Immediate Mode versus Display Listed [1]

• Immediate Mode Graphics

• Primitives are sent to pipeline and display right away

• No memory of graphical entities

• Display Listed Graphics

• Primitives placed in display lists

• Display lists kept on graphics server

• Can be redisplayed with different state

• Can be shared among OpenGL graphics contexts

CIS 636/736: (Introduction to) Computer Graphics

Rendering: join at the rasterizer Immediate Mode versus Display Listed [2]

Immediate Mode

Per Vertex

Operations &

Primitive

Assembly

Polynomial

Evaluator

DisplayList

Per Fragment

Operations

Frame

Buffer

CPU

Rasterization

Display Listed

Texture

Memory

Pixel

Operations

CIS 636/736: (Introduction to) Computer Graphics

Per join at the rasterizer

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Display Lists [1]

• Creating a display list

GLuint id;

void init( void )

{

id = glGenLists( 1 );

glNewList( id, GL_COMPILE );

/* other OpenGL routines */

glEndList();

}

• Call a created list

void display( void )

{

glCallList( id );

}

CIS 636/736: (Introduction to) Computer Graphics

Display Lists [2] join at the rasterizer

• Not all OpenGL routines can be stored in display lists

• State changes persist, even after a display list is finished

• Display lists can call other display lists

• Display lists are not editable, but you can fake it

• make a list (A) which calls other lists (B, C, and D)

• delete and replace B, C, and D, as needed

CIS 636/736: (Introduction to) Computer Graphics

Display Lists and Hierarchy join at the rasterizer

• Consider model of a car

• Create display list for chassis

• Create display list for wheel

glNewList( CAR, GL_COMPILE );

glCallList( CHASSIS );

glTranslatef( … );

glCallList( WHEEL );

glTranslatef( … );

glCallList( WHEEL );

glEndList();

CIS 636/736: (Introduction to) Computer Graphics

Per join at the rasterizer

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Color

data

Vertex

data

Vertex Arrays

• Pass arrays of vertices, colors, etc. to OpenGL in large chunk

glVertexPointer( 3, GL_FLOAT, 0, coords)

glColorPointer( 4, GL_FLOAT, 0, colors)

glEnableClientState( GL_VERTEX_ARRAY)

glEnableClientState( GL_COLOR_ARRAY)

glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );

• All active arrays are used in rendering

CIS 636/736: (Introduction to) Computer Graphics

Why use Display Lists join at the rasterizeror Vertex Arrays?

• May provide better performance than immediate mode rendering

• Display lists can be shared between multiple OpenGL context

• reduce memory usage for multi-context applications

• Vertex arrays may format data for better memory access

CIS 636/736: (Introduction to) Computer Graphics

Multi-pass Rendering join at the rasterizer

• Blending allows results from multiple drawing passes to be combined together

• enables more complex rendering algorithms

Example of bump-mapping

done with multi-pass

OpenGL algorithm

CIS 636/736: (Introduction to) Computer Graphics

Next Time (OpenGL Part 3 of 3): join at the rasterizerAccumulation Buffer

• Problems of compositing into color buffers

• Limited color resolution

• clamping

• loss of accuracy

• Accumulation buffer acts as “floating point” color buffer

• accumulate into accumulation buffer

• transfer results to frame buffer

CIS 636/736: (Introduction to) Computer Graphics

Next Time (OpenGL Part 3 of 3): join at the rasterizerFog

CIS 636/736: (Introduction to) Computer Graphics

Scissor join at the rasterizer

Test

Alpha

Test

Stencil

Test

Fragment

Depth

Test

LogicalOperations

Blending

Dithering

Framebuffer

Getting to Framebuffer

CIS 636/736: (Introduction to) Computer Graphics

Per join at the rasterizer

Vertex

Poly.

Frag

FB

Raster

CPU

DL

Texture

Pixel

Next Time (OpenGL Part 3 of 3):Stencil Buffer

• Used to control drawing based on values in the stencil buffer

• Fragments that fail the stencil test are not drawn

• Example: create a mask in stencil buffer and draw only objects not in mask area

CIS 636/736: (Introduction to) Computer Graphics

Next Time (OpenGL Part 3 of 3): join at the rasterizerAdvanced Imaging

• Imaging Subset

• Only available if GL_ARB_imagingdefined

• Color matrix

• Convolutions

• Color tables

• Histogram

• MinMax

CIS 636/736: (Introduction to) Computer Graphics

On-Line Resources join at the rasterizer

• http://www.opengl.org

• start here; up to date specification and lots of sample code

• news:comp.graphics.api.opengl

• http://www.sgi.com/software/opengl

• http://www.mesa3d.org/

• Brian Paul’s Mesa 3D

• http://www.cs.utah.edu/~narobins/opengl.html

• very special thanks to Nate Robins for the OpenGL Tutors

• source code for tutors available here!

• http://nehe.gamedev.net

CIS 636/736: (Introduction to) Computer Graphics

Books join at the rasterizer

• OpenGL Programming Guide, 5th – 6th Edition

• OpenGL Shading Language, 2nd Edition

• OpenGL Programming for the X Window System

• includes many GLUT examples

• Interactive Computer Graphics: A top-down approach with OpenGL, 4th – 5th Edition

CIS 636/736: (Introduction to) Computer Graphics

Summary join at the rasterizer

• Four More Short OpenGL Tutorials from SIGGRAPH 2000

• Vicki Shreiner: Animation and Depth Buffering

• Double buffering

• Illumination: light positioning, light models, attenuation

• Material properties

• Animation basics in OpenGL

• Vicki Schreiner: Imaging and Raster Primitives

• Ed Angel: Texture Mapping in OpenGL

• Display lists and vertex arrays

• Fog

• Stencil buffering, fragment programs (to be continued)

CIS 636/736: (Introduction to) Computer Graphics

Terminology join at the rasterizer

• Double Buffering

• Lighting

• Illumination Equation – describes light in scene

• Ambient light – catch-all term for whole scene, all lights

• Diffuse reflectance – omnidirectional, from matte surfaces

• Specular reflectance – unidirectional, for highlights: shiny surfaces

• Attenuation – how quickly light drops off as function of distance

• Pixel and Fragment Programs (“Pixel Shaders”)

• Texture Maps

• Other Mappings Discussed in Course

• Bumpakadisplacement – perturb surface normal, calculate lighting

• Reflection and transparency

• Environment

CIS 636/736: (Introduction to) Computer Graphics

Next: Polygons, OpenGL Tutorial 3 join at the rasterizer

• Dave Shreiner: Advanced Topics (concluded)

• Advanced Primitives: Cubic Curves, Bicubic Surfaces

• More on Shadow Stencil Buffer

• Alpha, Blending, Antialiasing

• Accumulation Buffer, Fog, Jitter

• Using the OpenGL Shading Language

• More on fragment programs

• Demo: color interpolation