CS 481/681: Advanced Computer Graphics

CS 481/681, Spring 2004
Advanced Computer Graphics

This web page is intended for students in Glenn G. Chappell’s CS 481 & 681 classes at UAF, spring 2004. Others are welcome. Linking to things listed here is fine, but be advised that this site will probably disappear some time in late 2004.

Department: °Mathematical Sciences, °U. of Alaska Fairbanks
Instructor: Glenn G. Chappell
Office: 201B Chapman
Office hours: Office hours: 2:15 p.m. MWF or by appointment.
Office phone: (474-)5736
E-mail: ffggc@uaf.edu
Paper mailbox: inside the Math Dept. office (101 Chapman)


Course Materials

Materials are listed with the most recent at the top. See below for links.

Week Class Meetings Assignments Handouts, Sample Code, Etc.
Week 15 
& Finals 
  • 5/5: Final Exam Meeting 1-3 p.m.
  • 5/3: Project Demo’s, etc.
Week 14 
  • 4/30: Project Demo’s, etc.
    Meet in the ARSC Discovery Lab (375C Rasmuson Library)
  • 4/28: Project Demo’s, etc.
  • 4/26: Project Demo’s; more on BRDF’s
Week 13 
  • 4/23: No class (All Campus Day)
  • 4/21: Guest Speaker
  • 4/19: Ray-tracing variations; intro. to BRDF’s
Week 12 
  • 4/16: Ray tracing effects
  • 4/14: More on ray tracing
    Slides: HTML, PowerPoint
  • 4/12: Intro. to advanced lighting; basic ray tracing
    Slides: HTML, PowerPoint
  • grtmain.cpp (C++ source)
    Main program for GRT (Glenn’s Ray Tracer), bare-bones version
    Requires other GRT source files (below) and vecpos.h
    Posted Fri 4/16
    Earlier version distributed in class Wed 4/14
  • grtray.h (C++ source)
    Ray class for GRT (Glenn’s Ray Tracer), bare-bones version
    Posted Fri 4/16
    Earlier version distributed in class Wed 4/14
  • grtobject.h (C++ source)
    Object classes for GRT (Glenn’s Ray Tracer), bare-bones version
    Posted Fri 4/16
    Earlier version distributed in class Wed 4/14
  • grttypes.h (C++ source)
    Misc. types for GRT (Glenn’s Ray Tracer), bare-bones version
    Posted Fri 4/16
    Earlier version distributed in class Wed 4/14
Week 11 
  • 4/9: More strange attractors; fractal terrain
  • 4/7: More on Julia & Mandelbrot sets; chaos
    Slides: HTML, PowerPoint
  • 4/5: Code for IFS’s; Julia & Mandelbrot sets
    Slides: see slides under 4/7.
  • ifs1.cpp (C++ source)
    IFS Fractals
    Requires ifsdat.txt
    Posted Fri 4/9
    Distributed in class Mon 4/5
  • ifsdat.tat (text file)
    Configuration file for ifs1.cpp
    Posted Fri 4/9
    Distributed in class Mon 4/5
Week 10 
  • 4/2: More on IFS fractals
  • 3/31: Fractals from IFS‘s
  • 3/29: Introduction to fractals; turtle fractals
  • koch.cpp (C++ source)
    Koch snowflake, an example of a turtle fractal
    Requires turtle.h
    Posted Mon 3/29
  • turtle.h (C++ source)
    Simple turtle-graphics package
    Posted Mon 3/29
Week 9 
  • 3/26: Particle systems
  • 3/24: More on particles
    Slides: HTML, PowerPoint
  • 3/22: Introduction to procedural methods; particles
    Slides: HTML, PowerPoint
  • partsys.cpp (C++ source)
    Particle System Skeleton Program
    Requires vecpos.h, transf.h & tfogl.h
    Posted Mon 3/29
    Distributed in class Fri 3/26
  • particles.cpp (C++ source)
    Particles Demo
    Requires vecpos.h, transf.h & tfogl.h
    Posted Thu 3/25
    Distributed in class Wed 3/24
Spring Break  
Week 8 
  • 3/12: More on files
  • 3/10: More on implicit surfaces; rapid prototyping; file formats
  • 3/8: Drawing implicitly defined surfaces
  • metaball.cpp (C++ source)
    Metaballs demo (requires cube.cpp & cube.h)
    Posted Wed 3/10
  • marching.cpp (C++ source)
    Marching cubes program (requires cube.cpp & cube.h)
    Posted Wed 3/10
  • cube.cpp (C++ source)
    Marching cubes package (companion to cube.h)
    Posted Wed 3/10
  • cube.h (C++ source)
    Marching cubes package (companion to cube.cpp)
    Posted Wed 3/10
Week 7 
  • simpleapp.zip (ZIP file)
    ZIP File of simpleApp VR Juggler Program
    Also stored in ~chappell/cs481 on ARSC SGIs
    Posted Wed 3/3
  • simpleevaluator.cpp (C++ source)
    Simple OpenGL Evaluator Demo
    Posted Mon 3/1
    Distributed in class Mon 3/1
  • evaluator.cpp (C++ source)
    OpenGL Evaluator Demo
    Posted Mon 3/1
Week 6 
  • 2/27: Curve drawing; concepts for splines
    Slides: HTML, PowerPoint
  • 2/25: VR user interface; notes on projects; introduction to object descriptions
    Slides: HTML, PowerPoint
  • 2/23: ARSC security; VR & TRANSF
    Slides: HTML, PowerPoint
  • tffly.cpp (C++ source)
    Flying & “Where am I” using TRANSF
    Requires vecpos.h, transf.h, tfogl.h
    (in the Transformations link section, below)
    Posted Wed 2/25
    Unfinished version distributed in class Mon 2/23
Week 5 
  • 2/20: DLab Operator Training, Part II
    Meet in the ARSC Discovery Lab (375C Rasmuson Library)
  • 2/18: Writing VR Juggler applications
    Slides: HTML, PowerPoint
  • 2/16: More TRANSF; VR programming
    Slides: HTML, PowerPoint
Week 4 
  • 2/13: DLab Operator Training
    Meet in the ARSC Discovery Lab (375C Rasmuson Library)
  • 2/11: Representing transformations; the TRANSF package
    Slides: HTML, PowerPoint
  • 2/9: Stenciling effects
    Slides: HTML, PowerPoint
  • shadowvol.cpp (C++ source)
    Demo of Shadow Volumes & TRANSF Package
    Requires vecpos.h, transf.h, tfogl.h
    (in the Transformations link section, below)
    Posted Wed 2/11
Week 3 
  • simplejitter.cpp (C++ source)
    Jittering Demo
    Requires jitter.h
    Posted Thu 2/5
  • jitter.h (C source)
    OpenGL book jittering table
    This file may be used in assignments
    Posted Thu 2/5
  • dof.c (C source)
    OpenGL book example 10-5, pp. 461-463:
    Depth-of-Field Effect
    Requires jitter.h
    Posted Thu 2/5
  • fade.cpp (C++ source)
    Accumulation & Fade Demo
    Posted Wed 2/4
    Distributed in class Wed 2/4
  • masking.cpp (C++ source)
    Buffer Masking Demo
    Posted Mon 2/2
    Distributed in class Mon 2/2
Week 2 
Week 1 
  • 1/23: Hierarchical object example; data structures for scenes; the basics of scene graphs
    Slides: HTML, PowerPoint
  • 1/21: More on drawable objects; hierarchical objects
    Slides: HTML, PowerPoint
  • 1/19: No class (AK Civil Rights Day)
  • face.cpp (C++ source)
    Hierarchical Object Demo
    Posted Wed 1/21
    Distributed in class Wed 1/21
Week 0 
  • 1/16: Course overview; drawable objects


External links (marked with a red dot °) last checked February 9, 2004.

Primary Course Links

°Interactive Computer Graphics
A companion web page for the blue text, by the author.
Example Programs (directory)
This directory contains source code for all example programs in the OpenGL Programming Guide (“the red book”). Some of these differ slightly from those in the text.
The official site for OpenGL, the graphics library used in this class. If you look around, you can find a fair amount of sample code.
°OpenGL Documentation
This is a web-ified copy of the OpenGL man(ual) pages. It is a bit out of date (OpenGL v1.1), and it is not a tutorial, but if you want to look up the spec’s for an OpenGL function quickly, this is the place to go. If you have problems with this site, here are some sites with the OpenGL 1.0 manual pages: °Site 1, °Site 2, °Site 3.
The homepage for the OpenGL Utility Toolkit (GLUT) by Mark J. Kilgard.
°GLUT Documentation
Some nice documentation, written by the author of GLUT.
Download GLUT for Windows
My own page on GLUT for Windows. If users of other OS’s want to give me any tips on getting GLUT running on the systems they use, I would be glad to expand this page beyond Windows.
CS 381, Fall 2003
The CS 381 (Computer Graphics) web page for the fall 2003 semester.

Other Links

The C++ Standard Template Library

°SGI - Standard Template Library Programmer's Guide
Some very nice, well organized documentation for the STL. It is not a tutorial, but if you know what you are looking for, and you already have a basic idea how the STL works, then you can find what you want quickly and easily. I have found the “Table of Contents” link to be the most useful starting point when I reference this page. Note: This site includes documentation for some non-standard SGI-only extensions of the STL (slist, rope, etc.).
°Phil Ottewell's STL Tutorial
This is an STL tutorial that many people seem to think well of. I did not learn STL from this tutorial myself, so I cannot say how good it is pedagogically. However, it does appear to be thorough, correct, and (unlike a number of STL tutorials on the web) up-to-date. If anyone works through this tutorial, please let me know what you think of it.

Learning OpenGL

OpenGL/GLUT Articles by by Miguel Angel Sepúlveda
This series of tutorial articles on OpenGL and GLUT appeared in °LinuxFocus (online magazine) in 1998. Unfortunately, I can find no single online index that lists all the OpenGL/GLUT articles, so here is my own list:
°OpenGL Tutors by Nate Robbins
This is a series of programs that allow the user to investigate various concepts in OpenGL by interactively changing parameters and viewing the result. “Tutors” are provided for fog, materials, textures, primitives, and various aspects of transformations. The pictures on the page illustrate the programs. The code is available in a ZIP file, through the link at the beginning of the page. I have not tried these, but many people speak highly of them.
°OpenGL Lighting, Shadows and Rendering Code
Mark Kilgard’s “way cool, way fast” OpenGL code sampler has been combined with code from other people on this page. The result looks good, but I have not checked it out in depth. More stuff is available in this links on the left side of the page.
°Performance OpenGL Course Material
Material related to a short course on “Performance OpenGL: Platform-Independent Techniques”, by Dave Shreiner and Brad Grantham of SGI. The site is a little bit disorganized, but contains some very worthwhile material. In particular, the first link on the page leads to PowerPoint slides from the 2002 version of the course, which I took and found very helpful. Lots of other stuff is available from the other links.

Portal Rendering

°Introduction to Portal Rendering
A nice explanation of the portal-rendering technique, by Niklas Elmqvist of the °Chalmers Media Lab in Sweden. The introduction is also available in a °PDF version.
°“Portals and Mirrors” paper
The original Luebke-Georges paper that introduced portal rendering, in HTML form. Includes two nice images.


vecpos.h (C++ source)
First file in the TRANSF package. Defines classes vec and pos. Comments, suggestions, and bug reports are very welcome. Current version: 0.6. Date: 23 Jan 2004.
transf.h (C++ source)
Second file in the TRANSF package. Defines classes rot, orient, transf, frameref, and the helper class tfquat. Comments, suggestions, and bug reports are very welcome. Current version: 0.6. Date: 23 Jan 2004.
tfogl.h (C++ source)
An experimental OpenGL interface for the TRANSF package. Comments, suggestions, and bug reports are very welcome. Current version: 0.6. Date: 23 Jan 2004.
°Using Quaternions to Represent Rotation
Some well-written notes on representing rotations using quaternions, written by °Laura Downs for a computer-graphics class at °Berkeley. This is the way rotations are represented internally in the TRANSF package, above.

Virtual Reality

°VR Juggler
The VR library we will be using. VR Juggler comes from a team headed by °Carolina Cruz-Neira, of the °Virtual Reality Applications Center at °Iowa State University.
The CAVE Library, developed at °The Electronic Visualization Laboratory, °University of Illinois at Chicago. The library has been repackaged as a commercial product, sold by °VRCO.


°Chaos - Lorenz
A brief story of Lorenz and the Butterfly Effect. The link at the bottom goes to an applet that illustrates the Butterfly Effect very well (quickly click twice in the applet window, at two slightly diffferent points).
°Chaos Homepage
Pictures and explanations of the Lorenz and Rossler attractors, a bifurcation diagram, and a few (2-D) fractals.
°Chaos and Fractals
Buried amongst the formulae on this page is a cute little applet that shows a bifurcation diagram and lets you magnify it. You'll need to increase the iterations and pre-iterations, in the "Controls" window, to get decent magnified views.
°The Butterfly Effect
A nice applet illustrating the Lorenz attractor.

Nifty Movies & Such

The website of the Animusic company, which has put together a unique video showing computer-generated instruments playing original music. IMHO this is the niftiest CG product ever.
A website about a very nice short CG movie (called “Snakes”) based on an Escher woodcut. The movie is by Cristobal Vila of °Etérea Studios; it is available for viewing in QuickTime format. Definitely worth a look.

CS 481/681, Spring 2004 / Last update: 3 May 2004 / Glenn G. Chappell / ffggc@uaf.edu