CS 488/688: Introduction to Computer Graphics

Fall 2021

Welcome to the home page for CS488/688, the introductory computer graphics course in the School of Computer Science at the University of Waterloo. This course focuses on 3D graphics and relevant topics in computer graphics.


This course gives students a solid background in 3D graphics techniques as a tool for implementing practical applications of computer graphics. A major part of the course involves hands-on programming activities.
At the end of the course, students should be able to
  • Explain the algorithmic and mathematical concepts used in computer graphics.
  • Write interactive programs that display and manipulate 3D geometry.
  • Write a ray tracing system and an interactive graphics application using OpenGL.
This course mostly focus on topics related to rendering (rasterization and ray tracing), but also touches on physics animation (particles, rigid bodies, and deformables). The topics covered in this course include, rasterization, sampling and reconstruction, transformations, graphics pipeline, triangle meshes, textures, real-time rendering techniques, ray-object intersections, cameras, colors and shading models, acceleration data structures, Monte Carlo integration, theory of light transport, path tracing, photon density estimation, particles, collisions, multi-body dynamics, rigid bodies, and deformables. Note that the topics in CS 488/688 vary at the discretion of the instructor for each term.


Times and Locations
There will be no in-person activity for Fall 2021. Lecture videos will be uploaded on LEARN early every week and students are required to watch them weekly. The Undergraduate Graphics Lab will be unavailable during the Fall 2021 term, so do not go there!
Toshiya Hachisuka
Teaching Assistants
Xiang Fang
Ryusuke Sugimoto
Office Hours
Office hours will be provided remotely by the course staff and by appointment. Please ask us to book one.
Announcements and Discussions
We are using MS Team for announcements, questions and discussions of class-related material. Usually, you should have been signed up at the start of the term. If you have enrolled late in the course, you will need to contact us for access. You are encouraged to ask questions in Use email only for specific issues pertaining only to you (e.g., questions about the marking of your work). Questions directly related to assignments (e.g., issues with building the code) should be directed to the TAs. Do not post solution to the assignments.
Additional resources
There is no required textbook for Fall 2021, but the following resources may provide good supplementary material.
  • The website realtimerendering.com lists a bunch of books that are free online. Among others, for ray tracing, we recommend the pbrt book as a general reference and Peter Shirley's e-books as a good supplementary material for ray tracing.
  • The graphics codex can serve as a reference to the topics and tools used in graphics.
  • The website open.gl can be a good starting point for programming in modern OpenGL.
  • A longer sequence of tutorials at learnopengl.com goes into more detail about specific topics in OpenGL.
  • Song Ho Ahn also has a number of useful tutorials that explain concepts in 3D computer graphics, especially as related to the OpenGL graphics pipeline.
  • Docs.gl for the OpenGL API reference.
  • Terence's OpenGL tutorial slides.
  • Shadertoy and GLSL Sandbox showcase interesting (fragment) shader programs.
  • Inigo Quilez has several articles explaining practical solutions to many problems in graphics.
  • The course note of CS 488/688 from the previous term is also available here for your reference.
If you know other resources that you have found useful in this course, please let us know!


Lectures are not everything
The lectures are designed to give you a solid understanding of the concepts of computer graphics, but they do not cover everything you need to know to complete the assignments. For example, I will not be talking about the specifics of the OpenGL API or the libraries for the UI, so you will need to find them out by yourself. Otherwise, you will see me reading out "glBindVertexBuffers(GLuint first, GLsizei count,...)" etc., which is painful to watch, isn't it? The best way to learn these things is to actually implement them yourself in the assignments. In addition, we intentionally omit some technical details in the lectures in order to have you learn the important fundamental ideas in a limited time. If you want to understand in more detail, we recommend asking questions or looking at the additional resources.
While there is no hard requirement, generally speaking, we except students to be comfortable with probability, linear algebra, and calculus. Since this course involves quite a bit of coding tasks, you are also expected to be somewhat comfortable with algorithms and data structures, coding environment, debugging, and trouble-shooting in programming (especially in C++). You will need to have access to a coding environment (e.g., PC or laptop that can run the provided code and VirtualBox).
Marking scheme
Students are evaluated based on the coding assignments. Your score relies on the successful completion of the programming tasks as described in each assignment. Each assignment contributes toward the final score as
  • A0: 0%
  • A1: 15%
  • A2: 15%
  • A3: 15%
  • A4: 15%
  • Project proposal: 10%
  • Project: 30%
For the Fall 2021 term, we have no midterm and final exam. Students should contact the TAs about concerns with respect to the marking within one weeks of the date it was first returned to the students. If the issues cannot be resolved between the TA and the student, the TA will inform the instructor, who will make the final decision.
Group work
Group work is not allowed in this course. However, discussions among students are encouraged. A good rule of thumb is that you should fully understand what you are doing and you submit the code that was written only by you.
Late submissions
Late submissions will be penalized by 10 percent per day and will not be accepted three days after the deadline. For example, if you missed your deadline by one minute, you will receive 10 percent penalty from your marks. If your submission is one day and one minute late, it will be treated as 2-days late. No late submission after 3 days from the deadline will be accepted and you will receive zero marks for the corresponding. Assignments whose marking require any corrective action from the course staff to address student's submission mistakes (e.g., missing files, files with incorrect names and/or permissions, problems with makefiles etc.) will be treated as 3-days late (i.e., 30 percent penalty). Read the instructions carefully to avoid losing any point!
Extensions, Solutions, and Absences
We do not extend deadlines under normal circumstances. Please consult with the instructor if you believe that your situation should be treated as a special case. We will not provide source code solutions for assignments. It's your responsibility to make sure that your code runs correctly. The deadlines for assignments are posted below. If you have planned absences, start work early to avoid missing deadlines.



Other University-related Information