**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. sbuss@ucsd.edu. APM 6210. 534-6455.

**Teaching assistant:** Frank Chang. fchang@math.ucsd.com. 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.

**Handouts:**

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

**Programming assignments**

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

**Written homework assignments:**

*Due Monday, April 15:*

From the book draft: Problems #3 on page 28; #7, #8, #9 on page 34; and #10 on page 37.*Due Monday, April 29:*From the book draft: Problems #4, #5 on page 100.

*Due Monday, May 6:*From the book draft: Chapter 4, Problems #4, #5, #7 (pages 128, 132, and 135).

*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).**

**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.

**Computer graphics resources on the web.**

- The official web site for OpenGL programming is at http://www.opengl.org/. 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.
- 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 http://www.opengl.org/developers/code/tutorials.html. If you find any particularly cool sample programs, please let me know, and I'll post it for the class.
- 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.
- 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).
- 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 http://www.opengl.org/developers/documentation/glut/spec3/spec3.html, or as postscript from http://www.opengl.org/developers/documentation/glut/glut-3.spec.ps. Finally, there is a local pdf version available too.