This course provides a broad introduction to computer graphics and imaging.

Topics: Image input and output devices such as cameras and displays, graphics hardware and software, input technologies and interactive techniques, typography and page layout, light and color representations, tone reproduction, image composition and imaging models, digital signal processing, sampling, aliasing and antialiasing, compression, two- and three-dimensional geometry and transformations, modeling techniques including curves and surfaces, reflection models and illumination algorithms, and basic methods for animation.


CS107, MATH 103.

Programming using C/C++ and OpenGL and use of common graphics tools such as drawing programs and image processing toolkits.

Masters students or students with a strong interest in continuing in graphics should take CS248 instead.







Jan 8, 10




Jan 15, 17




Jan 22, 24

Input Technology

Interaction Techniques


Jan 29, 31

Basis Functions and Interpolation



Feb 5, 7

Splines and Curves

Light and Color


Feb 12, 14

Digital Cameras



Feb 19, 21

Mattes and Compositing

Signal Processing and Sampling


Feb 26, Feb 29


Digital Video and HDTV


Mar 4, 6

Programmable Shading

Geometric Modeling


Mar 11, 13




Text and readings

There is one required text for the course.

  • Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis
    OpenGL Programming Guide, 5th Edition
    Addison-Wesley, 2006

This book, often called "The Red Book," covers OpenGL, but in the process touches on many of the topics we will study in this course. However, if you are in a pinch, you need not buy this book since most of the information is available online. In particular, the older 2nd Edition of the OpenGL Programming Guide is freely available.

Additional readings will be assigned from journals and conference proceedings, and excerpts from conference tutorials. Only papers NOT available online will be handed out in class. Readings for each lecture are available from the Lectures page.

Unfortunately, no single textbook covers all the material in the course. Thus, there is no required textbook. However, we recommend the following if you want additional background material.

  • Peter Shirley
    Fundamentals of Computer Graphics, 2nd Edition

    1. K. Peters, 2006.

Assignments, exams and grading

This course will include 8 programming assignments, one per week, in addition to a mid-term and a final.

The assignments will be short and are meant to be completed in a few hours. Example code and data will be provided so that you can concentrate on the main conceptual ideas and not need to write a lot of code. Additionally, of your 8 assignments, we will drop the lowest two scores when computing final grades.

The tentative list of assignments are:

  • Assignment1: Generative art

  • Assignment2: Animating a planetary orrery
  • Assignment3: Simple layout engine for a web browser
  • Assignment4: Interacting with a game controller
  • Assignment5: Matte extraction and compositing
  • Assignment6: Wavelet compression
  • Assignment7: Shading and texturing using programmable GPUs
  • Assignment8: Subdivision surfaces

Evaluation criteria: Programming assignments will count for 60% of your grade. As stated above, your best 6 grades out of the 8 programming assignments will be used for determining your final grade. The mid-term and the final will each count for 20% of your grade.

Collaboration: For the programming assignments, you may discuss the assignment with friends, but you are expected to implement your own solutions.

Late assignments: Assignments will be handed out on Thu and are due the following Thu at 11:59pm. No late assignments will be accepted for grading. Since we will be dropping your lowest assignment scores, a late assignment will essentially be considered one of your skipped assignments.

Hardware and software

You are encouraged to do class assignments on your personal computer. A relatively modern graphics card is useful, but not necessary. OpenGL is readily available on Linux, Windows and Mac platforms. The support code has been tested on all of these platforms.

If you do not wish to develop on a personal machine, you will have access to the 'myth' machines located in Gates B08. These 3.2 Ghz DELL Dual-Xeon Linux boxes, named myth1 - myth29 are available for remote access. 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, consult this ITSS web page. Registered students will get an extra 200MB of disk quota for the quarter. Please notify the course staff immediately if you do not notice this quota increase withing 48 hours of officially signing up for the course.