Math 217A - 3D Computer Graphics

Instructor: Sam Buss
U.C. San Diego, Spring 2002

Time and place:   MWF 12:20-1:10.  Solis 109 (tentative)    First meeting, Monday, April 1, 12:20.
Instructor: Professor Sam Buss.  APM 6210.   534-6455.
Teaching assistant:   Frank Chang.   APM 6337F.

Buss's Office hours:  Monday 9:00-9:50, Tuesday 10:00-11:00, Wednesday 2:00-3:00.  (Office hours begin Wednesday, April 3rd, due to prior commitment on Tuesday, April 2.)
Computer lab:   APM basement, PC lab.  Rooms numbers are B325 and B349/B337.
For math grad students and visitors: The new PC's in the second floor and fifth floor labs should work fine with OpenGL. (I have not yet tested them.)
Computer lab office hours. (F. Chang)    Tuesday 11:00-12:00, 2:00-3:00. APM B349/B337.

Textbook:  Copies of Buss's forthcoming book 3D Computer Graphics: A Mathematical Introduction with OpenGL (Cambridge University Press, 2002) in preliminary form will be made available for free, and will serve as the primary textbook.  In addition, you may wish to buy a copy of the OpenGL programming manual, but this is optional as earlier additions of this are freely available on the web, and the C++ compiler has good "help" facilities for OpenGL.

Course annoucement: This course is an introduction to computer graphics, with particular emphasis on the mathematical foundations and mathematical methods. Lectures will be theoretical, but students will also learn how to use OpenGL and to create 3D graphics. Computer graphics is widely used for scientific visualization, simulators, movies and computer games, and depends heavily on mathematical techniques.
    The course will discuss the mathematics and physics needed for comptuter graphics, for both realtime and offline applications. topics include: affine transformations, perspective, Bresenham algorithm, homogeneous coordinates, barycentric coordinates, bilinear interpolation, hyperbolic interpolation, quaternions, Bezier curves, B-spline curves, blossoming, interpolating splines, shading, spline surfaces, color perception, color representation, texture mapping, ray tracing, intersection testing, radiosity. If time permits, we will discuss topics from animation and simulation (inverse kinematics, forward dymamics, collisions, intersections and contacts are possibilities).
    Prerequisites: This course is intended for graduate students in mathematics or engineering. The mathematical prerequisites are strong familiarity with undergraduate calculus and linear algebra. Undergraduates should take the course only with prior approval and only on a space-available basis. Students should have had some exposure to at least one language in the C family (C, C++, Java, C#) as student work will include programming assignments. Programming will use OpenGL, a widely used, cross-platform API for real-time computer graphcis. No prior knowledge of OpenGL is expected.  In addition, special code for ray tracing will be made available.


  1. How to log in and log out.
  2. Getting started with the Microsoft C++ compiler. (and the SimpleDraw program).
  3. How to create a new Visual C++ project.
  4. How to turn in files for programming assignments.
  5. How to create GIF files of the correct dimensions.

Programming assignments

  1. Assignment #1. Programming assignment.  Due: Wednesday, April 10.
  2. Assignment #2. Solar programming assignment.   Due: Wednesday, April 17.  Students' solutions available.
  3. Assignment #3. Build wrapped torus.  Due: Wednesday, April 24. Students' solutions available.
  4. Assignment #4. Add lights and material properties to your torus.  Due: Wednesday, May 1. Students' solutions available.
  5. Assighment #5. Ray Tracing.  Build a simple scene and implement a distributed ray tracing feature.  Students' solutions available.
  6. Final project.  Choose a project.  Students' solutions available.

Written homework assignments:

  1. Due Monday, April 15:  
    From the book draft:   Problems  #3 on page 28;   #7, #8, #9 on page 34;  and  #10 on page 37.
  2. Due Monday, April 29:
    From the book draft:   Problems #4,  #5 on page 100.
  3. Due Monday, May 6:
    From the book draft:   Chapter 4, Problems #4,  #5,  #7   (pages 128, 132, and 135).
  4. Due Wednesday, May 29:
    From the book draft:   Chapter 7, Problems #1, #2, #3  (pages 197, 198, 204.)

Software supplied with the course text book:  (Now all available, in preliminary form).

  1. Sample OpenGL programs
  2. Ray Tracing software

Finals Week Announcements:
    Buss's office hours:
Monday 9:00-9:50, 11:00-11:50.   APM 6210.  Also available other times Monday morning and Tuesday midday.
    Frank's office hours: Tuesday 11:00-2:00 (APM basement lab).
    Take home final: due Wednesday, 10:00 am.
    Final project: due Tuesday, early afternoon.
    Final project demos: Wednesday 10:00 am, APM basement lab.

Computer graphics resources on the web.

  1. The official web site for OpenGL programming is at    If you need to install OpenGL components (say, on a non-windows machine), you can look here under the "Users" section for assistance.    Also, look under the "Developers" section of the web site for tutorials, sample programs, etc.
  2. There are many sources for sample OpenGL programs on the web.  A list of sites of with sample OpenGL programs can be found under the official OpenGL site given above, at   If you find any particularly cool sample programs, please let me know, and I'll post it for the class.
  3. The OpenGL Programming Guide,  Addison-Wesley. Version 1.1 (2nd edition), or later edition.  Full book available on the web.  Slightly out of date, since the third edition is available in print, but Version 1.1 of OpenGL is probably what you will be using anyway.  This book is also available at the book store as a recommended text for the course.  There are other sites with the same material, such as Michel Buffa's site, to the older Version 1.0 in html.
  4. The OpenGL Reference Manual, Release 1. Full book available on the web.  This material is also available in the "Help" system on Visual C++ (and presumably other compilers too).
  5. GLUT homepage for Windows versions of GLUT.  (Need to download to supplement the standard Visual C++ distribution, if you are programming on your own computer.)   Links to documentation are available from the GLUT homepage too, but are frequently broken.  You can also download the documention from, or as postscript from   Finally, there is a local pdf version available too.