Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Computer Graphics Course

Course material for an undergraduate level course in computer graphics

Course designed by Prof. Alec Jacobson, David I.W. Levin and Karan Singh from University of Toronto, with assistance from Yotam Gingold at GMU.

Prerequisites and dependencies

In general, the materials in this course assume that students should have already taken Linear Algebra and Calculus.

Students should have already taken Introduction to Computer Science and should be proficient in computer programming (in any language) and should feel comfortable programming in C++.

Some coding assignments make use of Eigen, an open-source linear algebra library; and libigl, an open-source geometry processing library. Each assigment is built using CMake.


The course is structured to run with fast paced weekly assignments in the following order:

  1. Introduction & Raster Images
  2. Ray Casting
  3. Ray Tracing
  4. Meshes
  5. Boundary Volume Hierarchy
  6. Shader Pipeline
  7. Kinematics
  8. Mass-Spring Systems

There is a slight dependence to these assignments:

Each topic has its own git repository. Inside each, there is a file contains background information necessary for understanding the topic's coding assignment.

The Introduction contains detailed information about compilation, file layout and assignment protocols.


The Book.

These assignments were prepared to closely follow:

Fundamentals of Computer Graphics, Fourth Edition, Steve Marschner, Pete Shirley, et al. 2015.


The background materials link heavily to Wikipedia articles. Sometimes the wikipedia articles relating to computer graphics are less informative than they could be. Edit them!

Are you an instructor?

There are instructor repositories for all of the assignments above. If you're an instructor for a geometry processing course, send an email to for an invitation.

For my reference, I can add a new instructor with github id [githubid] to all solution repos using:

github-add-user -u alecjacobson -r $(echo alecjacobson/computer-graphics-{raster-images,ray-casting,ray-tracing,bounding-volume-hierarchy,meshes,shader-pipeline,kinematics,mass-spring-systems}-solution | tr ' ' ',') [githubid]

Corresponding solution/instructor (private) repos are located at:

  1. Pre test
  2. Introduction & Raster Images
  3. Ray Casting
  4. Ray Tracing
  5. Bounding Volume Hierarchy
  6. Meshes
  7. Shader Pipeline
  8. Kinematics
  9. Mass-Spring Systems

Future Assignments

  • Ambient Occlusion + Occluding Contours (Multipass rendering)
  • Boids
  • Rigid Body with contacts
  • Cloth Simulation
  • Physically Based Real-Time Rendering
  • Half-Edge Data-structre
  • 1D plotting (vector graphics line rasterization)
  • Path Tracing, BRDFs
  • Mesh Laplacians


Computer Graphics Course






No releases published


No packages published