Course outline

CS 248 - Introduction to Computer Graphics
Autumn Quarter, 1999
Marc Levoy
Handout #1

Table of contents:



Marc Levoy
Gates Computer Science Building, Room 366
(650) 725-4089
Office hours: Tue/Thu 11:00am - 12:15pm and by appointment

Teaching assistants

Szymon Rusinkiewicz
Gates Computer Science Building, Room 372
(650) 725-8194
Office hours: Thu, Fri 3:00pm - 5:00pm

Sean Anderson
Gates Computer Science Building, Room 360
(650) 723-3154
Office hours: Mon, Fri 8:00am - 10:00am

David Koller
Gates Computer Science Building, Room 379
(650) 723-2409
Office hours: Tue 2:30pm - 4:30pm, Wed 2:00pm - 4:00pm

Lucas Pereira
Gates Computer Science Building, Room 360
(650) 723-3154
Office hours: Wed 4:00pm - 6:00pm

Joint email address:

Help sessions: on the weekends immediately preceeding the due dates of each programming assignment, the instructor and teaching assistant will hold additional office hours in the Sweet Hall SGI lab, rather than in their offices. Hours TBA. In addition, on the Friday of each week in which an assignment is made (except assignment #4), there will be a help session 3:15 - 4:05 in Gates B03, televised on SITN channel E1. These will be on Oct. 1, Oct. 15, and Nov. 5. Finally, there will be review sessions on the Fridays immediately preceeding each exam, i.e. on Oct. 29 and Dec. 3, also at 3:15 - 4:05 in Gates B03, televised on channel E1. Other than these dates, there will be no class or discussions meetings on Fridays.


Ada Glucksman
Gates Computer Science Building, Room 368
(650) 725-3724


There will be twenty lectures. The topics to be covered, with approximate dates, are given in the class schedule. Immediately after each lecture, or the night before if I'm unusually efficient, I will place my lecture notes online, linked off of the class schedule. They will also be delivered to SITN and incorporated into the Stanford Online digitization of each class, but there will undoubtedly be some delay in this process.


Required: Foley, van Dam, Feiner, and Hughes,
Computer Graphics: Principles and Practice,
second edition in C, Addison-Wesley.
Click here for errata
Optional: Woo, Neider, and Davis,
OpenGL Programming Guide
second edition, Addison-Wesley.
Click here for errata

Copies of both texts are available in the textbook and general computer science sections of the campus bookstore. Readings from Foley, van Dam, Feiner, and Hughes will be assigned throughout the course. The OpenGL book will be used only in the last half of the course. We first want you to learn how OpenGL's graphics primitives work. Afterwards, you can start using it as a power tool.

Additional readings

We will also read a number of papers from current journals and conference proceedings. I will hand out copies of these papers in class as they become relevant.

Reserve readings

I am placing the following materials on 2-hour reserve at the Stanford Math/Computer Science Library.

  1. Foley, van Dam, Feiner, and Hughes, Computer Graphics: Principles and Practice, second edition, Addison-Wesley.
  2. Woo, Neider, and Davis, OpenGL Programming Guide, second edition, Addison-Wesley.
  3. Andrew Glassner, Graphics Gems,Academic Press.
  4. James Arvo, Graphics Gems II, Academic Press.
  5. David Kirk, Graphics Gems III, Academic Press.
  6. Paul Heckbert, Graphics Gems IV, Academic Press.
  7. Alan Paeth, Graphics Gems V, Academic Press.

Numbers 3 through 7 are compendiums of graphics tricks, hacks, and useful algorithms. These three books are so popular that if I don't place them on reserve, you'll have to buy them to read them - not a bad idea in any case.

Also on reserve (permanently) are the proceedings of ACM Siggraph, the premiere forum for publication of research results in the field of computer graphics. I will frequently reference Siggraph papers during my lectures. I encourage you to browse these books; you will find them inspirational in times of suffering and a wellspring of good ideas for your assignments.

Course prerequisites

CS 248 assumes no prior knowledge of computer graphics. However, most students taking 248 have had some exposure to graphical user interfaces and interaction techniques, usually through CS 107 or 108. Formally, we require CS 107, not 108 as stated in the catalog, and we require Math 103. However, we do not enforce these prerequisites. More specifically, we assume some programming experience in C (or C++) on a UNIX workstation, and we assume a basic knowledge of calculus and linear algebra (one college-level course of each). An exposure to digital signal processing or Fourier analysis is useful, but it is not required.

Course requirements

In addition to regularly scheduled readings, the workload for this course consists of four programming assignments, an evening midterm examination, and a final examination. The midterm will be on Monday, Nov. 1, 7:00pm - 9:00pm. The final will be on Friday, Dec. 10, 12:15pm - 2:15pm. SITN students must come to campus for both exams. Makeup exams will be offered only in extreme circumstances, and must be approved in advance.

The first two assignments teach you how to write low-level imaging and graphics primitives, while being fun at the same time. The last two assigments, which build on one another, let you design and implement a video game in OpenGL for our high-performance Silicon Graphics workstations. It will be impossible not to have fun on these two assignments.

  1. Paint program - 24-bit painting program that includes a weighted mask-driven tinting brush.
  2. Scan converter - Polygon scan converter for interactively defined triangles. Supersampling will be used to provide antialiasing.
  3. Video game - The basic game engine for a video game of your own design. You will use OpenGL for this assignment.
  4. Video game with shading - Improved game engine that includes Phong illumination, interpolated shading of triangle meshes, and/or textures.

For each assignment except #2, you will demo your program to myself or a teaching assistant on a Monday. For assignments done in teams, all team members must be present at the demo. A commented copy of your source code and a brief (1-2 pages) description of the functionality implemented are due online by 5:00pm the following day. Assignment #2 is due online at 5:00pm on the day stated. We will describe in a later handout how the on-line submissions will be handled.

Grading policies

Evaluation criteria: Assignments #1 and #2 will each count as 15% of your grade, assignment #3 as 10% since it is just an intermediate submission, and assignment #4 as 20%. The midterm and final exams will each cover half of the material in the course, and will each count as 20%. Grading criteria on the assignments will vary; typical criteria are correctness (40%), efficiency (20%), elegance (of your UI and your code) (20%), and originality (20%). Your grade in the course will not depend on whether you are taking it for 3 or 4 credits.

Collaboration: You may discuss the first two programming assignments with friends, but you are expected to implement your own solutions. On the third and fourth programming assignments (the video game), you are permitted (and encouraged) to form teams of two or three people and partition the work among the team members. The work expected from each teach will be proportional to the size of the team. Teams may discuss these assignments with other teams, but each team is expected to implement the assignments independently. In particular, code must not be shared between teams. The exams must be individual efforts.

Late assignments: It is important that assignments be completed on time. To allow for unforeseeable circumstances, you will be allowed one weekday of grace during the quarter for either a late demo or a late writeup. Beyond this, late demos or writeups will cause you to be penalized by 10% of your grade for that assignment per weekday that either is late. If both are late, you will only be penalized once, according to the maximum lateness among them. Late demos will be accommodated subject to the availability of the TAs. If the late demo slots for a particular day are full, you may be delayed another day, possibly incurring a penalty. On programming assignment #4, neither the demo nor the writeup may be late. Incompletes in this course are given only in exceptional circumstances.

Hardware and software

Hardware: To do the assignments you will have access to the Stanford Graphics Teaching Laboratory. The lab, located in two rooms in the basement of Sweet Hall, contains 15 Silicon Graphics Indigo2 Extremes (250 Mhz R4400, 200K polygons/sec, 128 MB main memory) and 15 Silicon Graphics Octane SIs (175 Mhz R10000, 400K polygons/sec, 128 MB main memory). The Extremes are named firebird1 - firebird15 and run Irix 6.5. The Octanes are raptor1 - raptor15 and run Irix 6.4. Use telnet rather than rlogin for remote access. Students in CS 248 have non-exclusive priority access to these laboratories, whose doors are protected by card readers.

Software: For the first two assignments, we provide a support package that runs on most X-compatible workstations, including those on the second floor of Sweet Hall. To use the package, you must program in C or C++. The package provides sliders, buttons, a drawing canvas, some help with mouse and cursor interaction, and a few utilities for loading and storing images. If you are working on a 24-bit workstation (such as our SGIs), the package allows you to display your 24-bit images directly. If you are working on an 8-bit workstation, the package automatically dithers and gamma corrects your image prior to display. For the last two assignments, you will program in OpenGL, which runs on all the workstations in Sweet Hall.

Using other platforms: Grading of programming assignments (except #2) consist of face-to-face demos, which must be given in the Sweet Hall lab. If you prefer working on the InfiniteReality engine in your dorm room or the clone that your startup video game company is developing, you may copy our support package (for the first two assignments) and use it locally. All you need is X and Motif. For the last two assignments, your clone needs to support OpenGL. In any case, you must make certain that your program runs on the Sweet Hall SGIs prior to demo day (or submission day for assignment #2). Moreover, to help us judge the performance of your program, your program must be executing on a Sweet Hall SGI workstation as well as displaying there during your demo.

Online services

Student accounts: The Sweet Hall SGI workstations share accounts and file servers with the Sweet Hall machine cluster. All students with leland accounts automatically have accounts on these machines. Home directories on these machines are shared with other Stanford Computing Clusters using AFS. If you do not have a leland account, surf to

Course directory: Once your account is active, log in to one of these workstations and browse through the directory /usr/class/cs248. This will be your course directory. All software and data relevant to the course will be placed here. In particular, this is where you will find the front-end program and X support package for the first two programming assignments. See the README file for more information. A copy of these tools will also be placed at the anonymous ftp site By the way, pay no attention to the contents of /usr/class/cs248/old. These assignments are not the same as the assignments I will give you.

World Wide Web: All class handouts, assignments, reading lists, and lecture notes will be available via the Web at URL Hardcopy of selected materials will be made available in class. SITN no longer offers courier service for materials that are also online, but you can print them out from the Web. A few copies will also be placed in the handout cabinet in Gates Hall, wing 3B, copy room, (room 377).

Newsgroup: A newsgroup has been set up for this course. It is called su.class.cs248. Feel free to post news to this group. It is intended for posting questions to your fellow students, flaming at the professor (I may, however, read the newsgroup on occasion!), looking for project partners, etc.

Emailing addresses: To send email to the instructor or a particular TA, use the individual email addresses listed earlier in this document. For questions directed to the TAs jointly and for other purposes that we will announce throughout the class, use Do not send email to multiple primary recipients, except via cs248tas. Choose one recipient as your "To:" and make the others "CC:". Otherwise, you might get no response, or you might get two responses and we'll get annoyed.

Class emailing list: For items of urgent and universal importance such as clarifications in the assignments or bugfixes related to the support package, your instructors will use an emailing list to contact you, so please make sure we know your email address, i.e. fill in the student questionnaire!

SITN and Stanford Online: I teach because I enjoy interacting with students. This is one reason we use face-to-face grading in the programming assignments. In addition, I would like everyone to attend class. I enjoy seeing your alert, smiling faces in the classroom and, like most teachers, I teach best to a live audience. If you cannot attend a particular class, the lectures will be videotaped by SITN and made available through the library system in the usual manner. They will also be digitized and made available via Stanford Online. However, I appeal to you not to abuse this system. If the only time I see you in person is during grading sessions, we have both lost something precious.

Video game competition

In case the delight of learning does not sufficiently motivate you to exert yourselves heroically on the programming assignments, there will also be a video game competition. At 4:00pm on Monday, November 29, a judging will be held to select the best game made for assignments #3 and #4. While grades for the assignments are based mainly on "technical merit", the competition will be judged on both "technical merit" and "compelling game play." The jury, to be named later, will consist of computer graphics experts from both industry and academia. There will be several awards and one grand prize of "considerable value."
Copyright © 1999 Marc Levoy
Last update: November 30, 1999 12:02:03 AM