Computer Graphics
Number: CSD 15-462
Instructor: Srinivasa Narasimhan
Teaching Assistants: Eric Butler
Zeyang Li (Linus)
Kristin Siu
Office Hours:
Srinivasa: By Appointment
Linus: T 8:00PM-10:00PM
Kristin: W 7:00PM-9:00PM
Eric: TH 7:00PM-9:00PM
Time: TR 10:30AM - 11:50AM
Location: HH B103 (Lecture)
GHC 5205 (TA Office Hours)
Bulletin Board: cmu.cs.class.cs462
(Instructions here.)


This course provides a comprehensive introduction to computer graphics modeling, animation, and rendering. Topics covered include basic image processing, geometric transformations, geometric modeling of curves and surfaces, animation, 3-D viewing, visibility algorithms, shading, and ray tracing.



The programming assignments in this course will be written in C++ and require knowledge of mathematics involving matrices, vectors, etc. Therefore successful completion of the following courses is required:

15-213/18-243 Introduction to Computer Systems

and either

18-202 Mathematical Foundations of Electrical Engineering

or both

21-241 Matrix Algebra, and
21-259 Calculus in Three Dimensions

Once you've completed 15-462, you may be interested in other courses offered by the Carnegie Mellon Graphics Lab.


There are two required textbooks for 15-462 this semester:

Shirley, Peter et. al. Fundamentals of Computer Graphics. 2nd ed. Wellesley: A K Peters, 2005.

OpenGL® Architecture Review Board. OpenGL® Programming Guide. 6th ed. Boston: Addison-Wesley, 2007.

An older edition of the OpenGL® Programming Guide (covering the OpenGL® 1.1 specification) may be found online here and should be sufficient for the purposes of this course. However, the printed text may be of interest as it is newer than the online version and covers the OpenGL® 2.1 specification.

Assignments & Grading

This semester's offering of 15-462 will include three programming projects, two written homeworks, and midterm and final exams. Final grades will be computed as follows:
  • (10%) Homework 1
  • (10%) Homework 2
  • ( 5%) Project 0 (OpenGL)
  • (15%) Project 1 (Spline)
  • (25%) Project 2 (Raytracing)
  • (15%) Midterm Exam
  • (20%) Final Exam
Regardless of the platform on which you develop your code, your project will be graded based on its performance and functionality in the school's linux machines, which include all machines in WeH 5336, 5205, 5207 and the linux machines in the West Wing cluster. To avoid last-minute surprises (and crowds!), please ensure your code compiles and runs correctly well before the deadline!

Late Policy

Late projects or assignments will NOT be accepted unless you obtain permission from the instructor.

Submission Instructions

Your handin directory may be found at /afs/, with ? being the project number, starting from 0. All your files should be placed in the corresponding project directory. Please make sure you have a directory and are able to write to it well before the deadline. We are not responsible if you wait until 10 minutes before the deadline and run into trouble. Do not add levels of indirection when submitting. For example, your makefile should be at .../andrewid/p?/Makefile, not .../andrewid/p?/myp?/Makefile or .../andrewid/p?/p?.tar.gz. Please use the same arrangement as the handout. You should submit all files needed to build your project, as well as any models or screenshots that you used or created.
  • src/ folder with all .cpp and .hpp files.
  • Makefile
  • All *.mk files
Be aware that you have a limit to you AFS space, so do not submit an unreasonably large number of models or images. Please do not include:
  • The bin/ folder or any .o or .d files.
  • Executable files
We will enter your handin directory and run make, and it should build correctly. The code must compile and run on CMU's linux cluster machines. Be sure to check to make sure you submit all files and it builds correctly. Failure to follow submission instructions will negatively impact your grade.

BBoard Posting Instruction
When you post to the bboard, you should use "post+..." instead of "bb+", Please refer to for details


Note: This syllabus may change during the course. Keep checking back.

Name: Introduction
Date: Tues 08/25
Reading: OpenGL® Programming Guide: CH 1-2
Slides: Lecture Slides
Name: OpenGL Lecture 1
Date: Thur 08/27
Notes: Project 0 Assigned
Reading: OpenGL® Programming Guide: CH 3-6
Reading: Fundamentals of Computer Graphics: CH 2
Project: Project 0 Description
Project: Project 0 Starter Code
Slides: Lecture Slides
Name: Math for Computer Graphics
Date: Tues 09/01
Reading: Fundamentals of Computer Graphics: CH 6
Slides: Lecture Slides
Notes: Math Notes
Name: Transformations
Date: Thur 09/03
Reading: Fundamentals of Computer Graphics: CH 7
Slides: Lecture Slides
Notes: Notes
Name: Viewing
Date: Tues 09/08
Reading: OpenGL® Programming Guide: CH 9
Slides: Lecture Slides
Notes: Notes
Name: Camera
Date: Thur 09/10
Slides: Lecture Slides
Name: Curves and Splines
Date: Tues 09/15
Reading: Caltech Multi-Res Modeling Group - Demos
Reading: Subdivision for Modeling and Animation
Reading: Fundamentals of Computer Graphics: CH 13
Slides: Lecture Slides
Notes: Notes
Notes: Project 0 Due
Name: Polygon Meshes and Implicit Surfaces
Date: Thur 09/17
Reading: Fundamentals of Computer Graphics: CH 10
Slides: Lecture Slides
Notes: Project 1 Assigned
Project 1: Project 1 Description
Project 1: Project 1 Starter Code
Name: Shading
Date: Tues 09/22
Reading: Fundamentals of Computer Graphics: CH 17
Slides: Lecture Slides
Date: Thur 09/24
Name: Texture Mapping and Project 1 Discussion
Date: Tues 09/29
Reading: Fundamentals of Computer Graphics: CH 9
Notes: Homework 1 Assigned
Slides: Lecture Slides
Homework 1: Homework 1
Name: Guest Lecture: Mohit Gupta [BRDF Measurement]
Date: Thur 10/01
Slides: Lecture Slides
Ray Tracing
Name: Lighting and Shadows
Date: Tues 10/06
Slides: Lecture Slides
Name: Ray Tracing
Date: Thur 10/08
Slides: Lecture Slides
Name: Midterm Exam Review
Date: Tues 10/13
Notes: Homework 1 Due
Name: Midterm Exam
Date: Thur 10/15
Name: Spatial Data Structures
Date: Tues 10/20
Slides: Lecture Slides
Indirect Illumination
Name: Radiosity
Date: Thur 10/22
Slides: Lecture Slides
Reading: Fast Radiosity
Notes: Project 1 Due
Notes: Project 2 Assigned
Project 2: Project 2 Description
Project 2: Project 2 Starter Code
Name: Photon Mapping
Date: Tues 10/27
Slides: Lecture Slides
Reading: Photon Mapping
Demo: The Light of Mies
Demo: Raytracing & Photon Mapping
Name: Direct-Indirect Separation
Date: Thur 10/29
Reading: Fast Seperation of Direct and Global Images
Name: Animation and Motion Capture
Date: Tues 11/03
Slides: Lecture Slides
Reading: Principles of Traditional Animation Applied to 3D Computer Animation
Name: Differential Equations and Particile System
Date: Thur 11/05
Slides: Lecture Slides
Reading: Differential Equation Basics
Reading: Implicit Methods for Differential Equations
Reading: Particle System Dynamics
Name: Guest Lecture: Adrien Treuille[Fluids]
Date: Tues 11/10
Slides: Lecture Slides
Image Processing
Name: Image Processing
Date: Thur 11/12
Slides: Lecture Slides
Name: High Dynamic Range Imaging + Tone Mapping
Date: Tues 11/17
Slides: Lecture Slides
Video: Fiat Lux
Video: Rendering with Natural Light
Name: Guest Lecture: Jean-Francois Lalonde
Date: Thur 11/19
Slides: Lecture Slides
Advanced Topics
Name: Displays
Date: Tues 11/24
Notes: Homework 2 Assigned
Reading: 3D Display
Reading: Another 3D Display
Reading: Water Display
Reading: Light Sensitive Display
Homework 2: Homework 2
Date: Thur 11/26
Name: Cool New Research in Graphics
Date: Tues 12/01
Notes: Project 2 Due
Reading: Photo Tourism
Reading: Harmonic Shells
Reading: Harmonic Fluids
Reading: Cloth Simulation
Reading: Image Interpolation
Name: Final Exam Review + Project Showcase
Date: Thur 12/03
Notes: Homework 2 Due

Last updated: Dec 05, 2009