CS 398: Introduction to Graphics Programming
Fall 2026
Welcome to the home page for CS 398, the introductory computer graphics programming course in the School of Computer Science at the University of Waterloo. This course focuses on basic topics in computer graphics and an introduction to graphics programming.
Overview
- Description
- This course introduces computer graphics techniques and related concepts, such as graphics processing units (GPUs). The main work in this course involves hands-on programming assignments using a shader programming language on GPUs. Students completing this course will gain knowledge of basic concepts in computer graphics and will be able to apply them to develop a computer graphics program that utilises GPUs. This course will also cover the basics of general-purpose programming on GPUs, where students learn how to harness GPUs beyond computer graphics.
- Objectives
-
At the end of the course, students should be able to
- Understand basic concepts in computer graphics to generate and process images and shapes.
- Write a computer graphics program that utilizes relevant mathematical concepts such as linear algebra and calculus.
- Gain hands-on experience in writing interactive programs that run on GPUs.
- Topics
- Points, Vectors, and Affine Combinations, Coordinate Spaces, Hierarchical Modeling, and Transformations, 3D Interactions, GPUs and Shader programming, Images, Geometry, Rendering, Physics-Based Animation, General Purpose Computation on GPUs
Logistics
- Times and Locations
- Check out Piazza or Quest.
- Instructor
- Toshiya Hachisuka: toshiya.hachisuka@uwaterloo.ca
- Teaching Assistants
-
Ege Ciklabakkal: meciklab@uwaterloo.ca
Frank Fan: y235fan@uwaterloo.ca
- Office Hours
- See the Piazza page for more details.
- Announcements and Discussions
- We use Piazza for announcements, questions, and discussions of class-related material. Be sure to sign up as soon as you can. The registration link will be provided on the LEARN web page. We will not be responsible for any consequence of you missing announcements made on Piazza (e.g., you did not realize the deadline has changed to another day). You are encouraged to ask and answer questions in Piazza or in person during lectures. Use email only for issues pertaining to your situation specifically, not questions about the contents (e.g., remarking request). Post questions publicly in Piazza whenever possible so that other students can also benefit from your questions. Do not post solutions to the assignments anywhere, not just within Piazza, even after the term.
- Additional resources
-
There is no required textbook, but the following resources may provide good supplementary material.
If you know other resources that you have found useful in this course, please let us know.
- 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.
- Ten Minute Physics by Matthias Muller provides a very good overview of theory and practice regarding physics-based animation.
- The graphics codex can serve as a reference to the topics and tools used in graphics.
- Shadertoy, GLSL Sandbox, and vertexshaderart.com showcase interesting shader programs.
- Inigo Quilez has several articles explaining practical solutions to many problems in graphics.
- You may want to check out WebGL2 Fundamentals and TWGL: A Tiny WebGL helper Library when working on assignments.
- Development of the course
- This course is still in development and your feedback matters a lot to ultimately turn it into a regular course. We encourage you to provide us constructive suggestions for improvements to make this course both useful and enjoyable for many students.
Expectations and Policy
- Overall design
- This course covers many topics but is designed to be approachable for students without any background in computer graphics. Start assignments early, attend lectures, and make use of Piazza, then you should be able to get a good grade. We want every student to succeed and are happy to help when difficulties arise. Those who are familiar with computer graphics already may find the depth of each topic not enough. If that is the case, you may wish to consider taking the more advanced course CS 488 instead. However, certain topics in this course are not necessarily touched in CS 488, so you may still enjoy CS 398 if you do not mind its introductory nature.
- Lectures are not everything
- The lectures are designed to give you a solid understanding of the basic concepts, but they may not cover everything you need to know to complete the assignments. Due to the nature of an introductory course that covers lots of different topics, we do not have time to dive into details on all of the topics. For example, we will not be talking about the specifics of APIs, libraries, or coding environments, so you will need to find them out by yourself. Not every single detail will be ironed out in lectures to solve assignments. Figuring out those details is part of your work. The assignments are, however, designed so that you do not need to deal with irrelevant details as much as possible. If you want to understand topics in more detail, we recommend asking questions or referring to the additional resources.
- Required background
- While there is no hard requirement, generally speaking, we expect students to be comfortable with linear algebra, calculus, data structures, and algorithms, and to be capable of learning a new programming language and referring to external resources as needed.
- 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: 16%
- A2: 16%
- A3: 16%
- A4: 16%
- A5: 16%
- Project: 20%
- Group work
- Group work is NOT allowed in this course. Your code should be written entirely by yourself. We will usually be able to detect if you copied code from other students. However, discussions among students are highly encouraged. A rule of thumb is that you should fully understand what you are doing and submit the code you wrote only by yourself.
- Use of AI-assisted tools
- Given the emerging technologies surrounding AI-assisted tools, we believe it is not appropriate to outright ban their use. However, since we want students to learn and understand the topics in this course, it is inappropriate for students to let AI tools complete tasks on their behalf. In particular, you are expected to understand the code you submit. As such, you are prohibited from using any AI coding tool on your assignments. You are still allowed to use AI tools to help you learn the topics, but you should work on assignments on your own based on your understanding. You may use AI tools to explain concepts, APIs, mathematics, or concepts in computer graphics. You may not ask AI tools to generate, modify, complete, review, optimize, or debug code that is part of your assignment submission. If we have concerns regarding unauthorized use of AI tools, we may ask you to explain your submission. Failure to demonstrate adequate understanding of the submitted work may result in a reduction of marks and, where appropriate, referral under university academic integrity procedures.
- Use of other resources
- You may not copy code from previous offers of this or a similar course, solutions by other students, or any other resources. Likewise, you are not allowed to use any other external libraries than we provided in our base code. Be careful that the use of AI-assisted tools might copy code from other resources without you knowing it. If you are in doubt, please consult the instructor first before you write your code. Failure to do so might result in zero point for the corresponding assignment.
- Late Submissions
-
Follow the formal procedure if the university's policy covers your situation (e.g., AccessAbility, VOC).
In addition, each student is allotted a total of FIVE late-day integer points in this course.
The late-day points cannot be combined with STA in this course.
If you use STA to this course, your late-day points will be automatically invalidated.
You can think of late-day points as a more flexible version that replaces STA specifically in this course.
By default, we assume STA is for other courses you are taking at the same time.
Your late-day points already accommodate unexpected situations, such as your internet connection being down right before the deadline or forgetting or missing the deadline (you do not need to explain to us why).
No submissions will be accepted more than 3 days (72 hours) after the deadline.
Late-day points work as follows;
- Your late-day points are used automatically whenever your submission is late, based on the number of late days.
- You can cancel the late-day penalty for one day using one integer point. The maximum number of late-day points are used automatically to cancel the penalty as much as possible.
- If you have no remaining late-day points, late submissions will incur 10% penalty per day for up to three days.
- Just to repeat, NO submissions will be accepted more than THREE (72 hours) days after the deadline. This is true whether or not the student has or used late-day points remaining. You will automatically get zero for that assignment.
- Extensions, Solutions, and Absences
- We do not extend deadlines under any circumstances based on students' personal requests (excluding official procedures like AccessAbility and VOC as noted below). The instructor may, however, decide to extend the deadlines at his or her discretion when it makes sense for other circumstances. Follow the formal procedure if the university's policy covers your situation such as sickness or any accommodation, but keep in mind that you can also use late-day points if you have any remaining. We will not provide source code solutions for assignments, and you may not publish your code at any point during and even after the course. Violators may face serious consequences including zero points for the entire course, even after the term. If you have planned absences, start work early to avoid missing deadlines. Again, we will not extend or move deadlines to accommodate such planned absences.
- Remarking and Accommodation Requests
- When we receive a remarking request, we will remark your entire submission, so your mark may be lower than the original if we find anything beyond what you pointed out. Any inconsistencies, misunderstandings, or errors in this policy, assignment descriptions, or course outline cannot be used as grounds for requesting accommodations or deadline extensions. Ask well in advance if you are not sure about anything. Special accommodations will be made only via AccessAbility or based on verification of condition (VOC). In the case of VOC, you must contact us to obtain any form of accommodation once your VOC is officially in (i.e., filing VOC does not automatically grant accommodation). Please tell us how your condition affected your ability, and we will make a final decision. In any case, try asking for accommodations before deadlines pass since retroactive accommodations are often limited. In most cases, we simply give you penalty-free three-day extensions (i.e., no need to use late-day points) or shift the weight to other assignments.
- Other University-related Information
- Please refer to the course outline regarding any other university-related information.
Interested in knowing more about graphics?
- Further Opportunities
- If you are a student enrolled in this course, we will be happy to discuss options for you to participate in research projects on various aspects of computer graphics. There are multiple official options available in the school (URF, USRA, MURA, URA, and honours thesis), or just unofficially working on something interesting (with me, with someone else, or on your own). Do check out our CGL web page to find out more information regarding cool research coming out of our school! Last but not least, any students who took this course are highly encouraged to continue taking CS488 in later terms!
Assignments
- This course has assignments and the final project. Please read the additional notes regarding assignment completion and submission. These notes may help you avoid losing marks unnecessarily. Students should contact the TAs in case of any issue related to the submission procedure.
-
Assignment 0: Warm-up
Due on Sep 17, 2026 11:59 PM ET -
Assignment 1: Image processing (TBA)
-
Assignment 2: Geometry (TBA)
-
Assignment 3: GPGPU (TBA)
-
Assignment 4: Rendering (TBA)
-
Assignment 5: Animation (TBA)
-
Project: Extra topics (TBA)
Schedule
-
The course will roughly cover the following topics.
The schedule may change slightly at any point for various reasons.
- Sept 10: Introduction
- Sept 15: GLSL basics and fragment shaders
- Sept 17: Image processing (basics) (A0 due, A1 release)
- Sept 22: Image processing (advanced), A1 mini-lab
- Sept 24: Colour (A1 due)
- Sept 29: Geometry representations (Project release)
- Oct 1: Vertex shaders and transformation (A2 release)
- Oct 6: Curves and surfaces
- Oct 8: Solid modeling, A2 mini-lab (A2 due on Oct 9)
- Oct 13: No class (Reading week)
- Oct 15: No class (Reading week)
- Oct 20: GPGPU basics and reduce (A3 release)
- Oct 22: GPGPU scan and sort
- Oct 27: GPGPU advanced
- Oct 29: Rasterization, A3 mini-lab
- Nov 3: Ray tracing (A3 due, A4 release)
- Nov 5: Ray marching
- Nov 10: Advanced shading
- Nov 12: Particles, A4 mini-lab
- Nov 17: Position-based dynamics (A4 due, A5 release)
- Nov 19: Wave simulation
- Nov 24: Fluid dynamics
- Nov 26: Showcase day (discussion/demonstration of your work through A1 to A4), A5 mini-lab
- Dec 1: Advanced topic, Conclusion (A5 due)
- Dec 3: Project lab
- Dec 8: No class by default (Project due)