Course Description

This course provides a broad introduction to the fundamentals of computer graphics. The main areas covered are modeling, rendering, animation and imaging. Topics include 2D and 3D transformations, drawing to raster displays, sampling, texturing, antialiasing, geometric modeling, ray tracing and global illumination, animation, cameras, image processing and computational imaging. There will be an emphasis on mathematical and geometric aspects of graphics, and the ability to write complete 3D graphics programs.

You can view last semester's offering of the course here.

Times and Locations


TuTh 9:30AM - 11:00AM, Li Ka Shing 245

Time Location TA
Tue 11-12 Moffit Library 106 Jose
Tue 11-12 Soda 310 Vivien
Tue 3-4 Wheeler 120 Jessie
Tue 4-5 Wheeler 200 Varsha
Tue 5-6 Wheeler 204 Seth
Tue 5-6 Haviland 12 Dorian
Wed 3-4 Moffit Library 103 Henry
Wed 3-4 Etch 3107 Xiling
Wed 4-5 Dwinelle 182 Peter
Wed 4-5 Wheeler 202 John


We will use Piazza for course communications and discussion.


A data structures course (e.g. CS 61B), C/C++ programming ability, fluency with development environment and debugging programs, knowledge of vectors, matrices basic linear algebra, calculus and trigonometry. Helpful: exposure to statistics, signal processing, and the Fourier transform.

Assignments and Exams


Students will be assigned four programming assignments. These assignments must be completed individually.

Final Project

Students will propose and complete a self-selected final project. The final project will be done in teams of three. Each team will present the project orally during the final project presentation and produce a detailed report.


There will be 2 midterm exams, currently scheduled for March 19 and April 25. There is no final exam for this course.

You may bring one, letter-sized, double sided cheat sheet to each exam. (One cheat sheet for exam 1, one cheat sheet for exam 2).

At this time, we do not plan to offer alternate exams. Please make a private piazza post or send an email for any extraneous issues, which will be handled on a case-by-case basis.


  • Projects (40%):
    • Projects 1, 2, and 4: 8% each.
    • Project 3: 16%
  • Midterms (35%):
    • 17.5% each
  • Final Project (20%)
  • Participation (5%)
    • See below for our participation policy
For cs284a Students:

Grading items are the same as above, but for your final project, you will be required to do a substantial project and submit a paper-style write-up. Instead of it being worth 20% of your grade, it will be worth 40% (everything else re-weighted accordingly).

Late Policy

Each student has five late days for the semester.

Late days apply to regular programming assignments only and not the final project. You can extend a programming assignment deadline by 24 hours using one point. If you do not have remaining late days, late hand-ins will incur a 10% penalty per day. Late days are meant to account for submission issues and other unforseen circumstances. For anything extreme beyond this, please make a private Piazza post or send us an email.

Participation Policy

Please read this article to see our participation policy. The basic idea is that doing any of the following each week will get you full participation points:

  • Attending both lectures
  • Attending one lecture and making one well thought out web comment
  • Making 3 well thought out web comments

The details are a little more complicated (in your favor!)

Academic Honesty

Please do not post code to a public GitHub repository, even after the class is finished, since these assignments will be reused both here and at other universities in the future.

The assignments are to be completed individually. You are welcome to discuss the various parts of the assignments with your classmates, but you must implement the algorithms yourself -- you should never look at anyone else's code.


The primary source for the course will be the website, lectures, and section. Suggested supplementary reading and resources will be posted on the course readings page. The following textbooks are recommended, but optional, resources for you in this course and beyond:

Fundamentals of Computer Graphics

Authors: 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

Physically Based Rendering: From Theory to Implementation (Third Edition):

Authors: Matt Pharr and Greg Humphreys

  • This book (PBRT) is the book for learning about modern ray tracing techniques. It has a great website with full source code online for an advanced physically-based ray tracer. It even won an Oscar for its impact on the film industry!
  • PBRT is available free online for you through Berkeley login: (Second edition, Third edition)
  • Also available on Amazon

Computer Graphics: Principles and Practice

Authors: John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley

Github OAuth Notice

We use Github's OAuth authentication mechanism both as a simple method to sign in, and to obtain a token which we can use to let you verify your assignment submissions as we see them for your own sanity.

Unfortunately, Github's permissions for OAuth applications have very poor granularity: the only way for us to be able to view the details of your private course repos is to also to have full write access to your repositories.

Your privacy is important to us. We do not use your API token to do anything other than access your assignment repositories within the cal-cs184-student organization, and even then in only a readonly context. If access permissions are a concern for you, feel free to ask us about how we use and protect your token.

This is a known problem and something Github is aware of.


Many thanks to Dillon Yao (Spring 2018 TA) for developing this course website.