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.


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, probability, signal processing, and the Fourier transform.


All days/times are listed PST.

General Virtual Location Days Times
Lecture Zoom Link M, Tu, W, Th 11 AM - noon
Project Parties CS 184 Discord Link M, Tu, W, Th 11 AM - noon


Name Virtual Location Days Times
Name Zoom Link Tu, Th 10 - 11 AM
Name Zoom Link Tu, Th 2 - 3 PM
Name Zoom Link Tu, Th 7 - 8 PM

Office Hours

Name Virtual Location Days Times
Name Zoom Link M 9 - 10 AM
Name Zoom Link Tu 4 - 5 PM
Name Zoom Link Tu 8 - 9 PM
Name Zoom Link W 9 - 10 AM
Name Zoom Link W 4 - 5 PM
Name Zoom Link Th 4 - 5 PM
Name Zoom Link Th 8 - 9 PM
Name Zoom Link F 9 - 10 AM
Name Zoom Link F 11 AM - noon


We will use Piazza for course communications and discussion.

Assignments and Exams


Students will be assigned four programming assignments (with Assignment 3 divided into two parts). 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 one, two, or three students; the expected complexity/quality of your project will be adjusted according to the number of team members. Each team will present the project orally during the final project presentation and produce a detailed report.


There will be 1 midterm exam. There is no final exam for this course.

Our exam is tentatively scheduled for July 27, 2020. The exam will be given via Gradescope and available for a 24 hour period after it is released. You may complete the exam at any time during the 24 hour period.

Students may consult course notes, textbooks, the internet, etc. to take the exam, but there will be no collaboration allowed. You should not consult any person (student or otherwise) about the exam or communicate with anyone while you are taking the exam.

We reserve

Academic Honesty and Integrity

We take academic honesty very seriously and expect all students to act with honor and integrity. We believe cultivating a culture of mutual trust and respect best enables you to learn in a safe and enjoyable environment.

Assignments must be completed individually. You are allowed (and encouraged!) to discuss the spec or high-level approaches to the project with other students, as well as discuss debugging. However, you should never share your code with another student or look at another student's code. You should never copy or submit any portion of another student's code, write-up, or final outputs/deliverables. Please do not post code to a public GitHub repository or include code snippets in your writeup, even after the class is finished, since these assignments will be reused both here and at other universities in the future.

There is absolutely no collaboration allowed on the exam.

We reserve the right to issue an additional oral exam to ensure a student's understanding of any portion of the assignments or exam.


  • Projects (50%):
    • Projects 1, 2, and 4: 10% each.
    • Project 3: 20%
  • Midterm (20%)
  • Final Project (25%)
  • Participation (5%)

Late Policy

Each student has five slip days total for the semester.

Slip days apply to regular programming assignments only and not the final project). You can extend a programming assignment deadline by 24 hours using one slip day. Due to the increased pace of the course in Summer, you are only allowed to use up to two slip days on a single assignment.

If you do not have remaining slip days, late hand-ins will incur a 10 point penalty per day. Slip days are meant to account for submission issues and other unforseen circumstances.

Participation Policy

Participation credit (5% of your total grade) is earned by completing Gradescope Checkpoints for each lecture. For each Checkpoint, you will receive full credit if you answer 2/3 or more of the questions correctly, half credit if you answer 1/2 or more of the questions correctly, and no credit otherwise.

The Checkpoints are to encourage you to keep up with the lecture content and ensure your understanding.

During the summer, we will occasionally release surveys to check in with students. If you submit a survey, you will receive credit for a Gradescope checkpoint that you did not originally receive full credit for. (There is no extra credit).


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:

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 has a completely free online edition
  • It is also available as a PDF through Berkeley login: (Second edition, Third edition)
  • And you can buy a hard copy on Amazon

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

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.