Stanford CS248, Winter 2019
Tues/Thurs noon-1:30
Room: Gates B1
Instructor: Kayvon Fatahalian
Course Description

This course provides a comprehensive introduction to computer graphics, focusing on fundamental concepts and techniques, as well as their cross-cutting relationship to multiple problem domains in interactive graphics (such as rendering, animation, geometry, image processing). Topics include: 2D and 3D drawing, sampling, interpolation, rasterization, image compositing, the GPU graphics pipeline (and parallel rendering), geometric transformations, curves and surfaces, geometric data structures, subdivision, meshing, spatial hierarchies, image processing, compression, time integration, physically-based animation, and inverse kinematics.

Instructors and CAs
[kayvonf at cs.stanford]
Gates 366
Office hours: Tues 1:30-2:30pm, or by appointment
Your fun and helpful CAs:
Colin Dolese
[cdolese at stanford]
Nikki Nikolenko
[liubov at stanford]
Katherine Sun
[ksun97 at stanford]
Elbert Lin
[el168 at stanford]
Office Hours Calendar
Announcements via Piazza

All class announcements will be made via our class Piazza Page. Please make sure you sign up for the course on Piazza.


CS248 DOES NOT depend upon CS148 as a prereq. However, we expect you to be a proficient C/C++ programmer to complete the required programming assignments. (We expect you've taken CS107). We also assume basic understanding of linear algebra (MATH 51) and 3D calculus.


There is no required textbook for CS248, though a variety of books may provide good supplementary material:

Pete Shirley and Steve Marschner with Michael Ashikhmin, Michael Gleicher, Naty Hoffman, Garrett Johnson, Tamara Munzner, Erik Reinhard, Kelvin Sung, William B. Thompson, Peter Willemsen, and Bryan Wyvill
Fundamentals of Computer Graphics. A K Peters, 2009
[ On Amazon ]

John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley
Computer Graphics: Principles and Practice
[ On Amazon ]

Grading / What You Will Do

All students will be expected to perform:

  • Participation in and out of class: Make comments on the course web site (one per lecture): 5%
  • Three programming assignments: 45%
  • Self-selected final project: 25%
  • Two exams: 25% (one in class, one take-home)

Programming assigments and the final project can be completed in teams of up to two students.

Each student is allotted a total of five late-day points for the semester. Late-day points are for use on the three programming assignments only. Late-day points work as follows:

  • A one-person team can extend a programming assignment deadline by one day using one point.
  • A two-person team can extend a programming assignment deadline by one day using two points. (e.g., one point from each student)
  • If a team does not have remaining late day points, late hand-ins will incur a 10% penalty per day (up to three days per assignment).
  • No assignments will be accepted more than three days after the deadline. This is true whether or not the student has late-day points remaining.
Collaboration Policy

Students in CS248 are absolutely encouraged to talk to each other, to the TAs, to the instructors, or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each student should write their own code and produce their own writeup. Consulting another student's solution is prohibited and submitted solutions may not be copied from any source. These and any other form of collaboration on assignments constitute cheating. If you have any question about whether some activity would constitute cheating, just be cautious and ask the instructors before proceeding!

You may not supply code, assignment writeups, or exams you complete during CS248 to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who've taken the course previously). Make sure to make repositories private if you use public source control hosts like github.