CS 398: Introduction to Graphics Programming
Fall 2025
Welcome to the home page for CS398, the introductory computer graphics programming course in the School of Computer Science at the University of Waterloo. This course focuses on basics topics in computer graphics and introduction to graphics programming.
Overview
- Description
- This course provides an introduction of computer graphics techniques and relevant concepts such 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 those to develop a computer graphics program that utilises GPUs. This course will also cover some basics of general purpose programming on GPUs where students get to learn how to harness GPUs beyond problems in 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 on writing interactive programs that run on GPUs.
- Topics
- Linear Algebra and Calculus Review, 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
-
Xiaochun Tong: xiaochun.tong@uwaterloo.ca
Wenyou Wang: wenyou.wang@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. 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 if 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
- 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. 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. The assignments are, however, designed so that you do not need to deal with those as much as possible. If you want to understand in more detail, we recommend asking questions or referring to the additional resources.
- Requirements
- While there is no hard requirement, generally speaking, we except students to be comfortable with linear algebra, calculus, data structures, and algorithms, and are 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 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 for any coding tasks. However, since we want students to learn and understand the topics in this course, it is inappropriate for students to simply let AI tools complete tasks on their behalf. In particular, you are expected to understand the code you submit. As such, whenever you use any AI-assisted tools (e.g., ChatGPT, Copilot), we require you to explain how you have used such tools to get your solutions. Explain as much detail as possible, including prompts and queries you have used for those tools, how you have used any output in your solution. Demonstrate that you are using the tools to solve the assignments, and that you are not using the tools to solve the assignments for you. We might ask you questions about your solution if we have concerns about your use of AI-tools, and your assignment mark would be adjusted based on your understanding of the code that you submitted.
- Use of other resources
- You may not copy code from previous offers of this or a similar course, solutions by other students, or 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
-
Each student is allotted a total of SIX late-day integer points.
Use your late-day points to accommodate unexpected situations, such as your internet connection being down right before the deadline or forgetting or missing the deadline.
No questions will be asked.
Late-day points work as follows;
- You can use late-day points by claiming how many points you wish to use in your README for each assignment.
- You can extend an assignment deadline by one day using one integer point. You can do extend the deadline more than one day, if needed, by using multiple points. Clearly note how many points you want to use (i.e., we do not automatically use the maximum possible points).
- If you have no remaining late-day points, late submissions will incur 10% penalty per day for up to three days.
- NO submissions will be accepted more than THREE 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
- Do not ask us to extend deadlines. We do not extend deadlines under any circumstances based on students' requests. 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.
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 by 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: Warm-up
Due on Sep 16, 2025 11:59 PM ET -
Assignment: Image processing
Due on Sep 23, 2025 11:59 PM ET -
Assignment: Geometry (TBA)
Due on Oct 21, 2025 11:59 PM ET (planned) -
Assignment: GPGPU (TBA)
Due on Oct 30, 2025 11:59 PM ET (planned) -
Assignment: Rendering (TBA)
Due on Nov 13, 2025 11:59 PM ET (planned) -
Assignment: Animation (TBA)
Due on Nov 27, 2025 11:59 PM ET (planned) -
Project: Extra topics
Due on Dec 2, 2025 at 11:59 PM ET
Schedule
-
The course will roughly cover the following topics.
The schedule can change slightly at any point for various reasons.
- Introduction
- GPUs and Shader programming
- Linear Algebra and Calculus Review
- Points, Vectors, and Affine Combinations
- Geometry
- Coordinate Spaces and Transformations
- 3D Interactions
- Physics-Based Animation
- Rendering
- Image Processing
- General Purpose Computation on GPUs
- Advanced Topics
- Conclusions
Other University-related Information
-
Mental Health: If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support.
On-campus Resources- Campus Wellness https://uwaterloo.ca/campus-wellness-resources/
- Counselling Services: counselling.services@uwaterloo.ca / 519-888-4567 ext 32655
- MATES: one-to-one peer support program offered by Federation of Students (FEDS) and Counselling Services: mates@uwaterloo.ca
- Health Services service: located across the creek from Student Life Centre, 519-888-4096.
- Good2Talk (24/7): Free confidential help line for post-secondary students. Phone: 1-866-925-5454
- Here 24/7: Mental Health and Crisis Service Team. Phone: 1-844-437-3247
- OK2BME: set of support services for lesbian, gay, bisexual, transgender or questioning teens in Waterloo. Phone: 519-884-0000 extension 213
- EMPOWER ME 1-833-628-5589 for Cdn./USA other countries see: http://studentcare.ca/rte/en/IHaveAPlan_WUSA_EmpowerMe_EmpowerM. EMPOWER ME in China are China North 108007142831 and China South 108001402851.
Diversity: It is our intent that students from all diverse backgrounds and perspectives be well served by this course, and that students’ learning needs be addressed both in and out of class. We recognize the immense value of the diversity in identities, perspectives, and contributions that students bring, and the benefit it has on our educational environment. Your suggestions are encouraged and appreciated. Please let us know ways to improve the effectiveness of the course for you personally or for other students or student groups.- We will gladly honour your request to address you by an alternate/preferred name or gender pronoun. Please advise us of this preference early in the term so we may make appropriate changes to our records.
- We will honour your religious holidays and celebrations. Please inform us of these at the start of the course.
- We will follow AccessAbility Services guidelines and protocols on how to best support students with different learning needs.
-
Academic Integrity: In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. [Check https://uwaterloo.ca/academic-integrity/ for more information.]
Grievance: A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70, Student Petitions and Grievances, Section 4. When in doubt please be certain to contact the department's administrative assistant who will provide further assistance.
Discipline: A student is expected to know what constitutes academic integrity [check https://uwaterloo.ca/academic-integrity/] to avoid committing an academic offence, and to take responsibility for his/her actions. A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about 'rules' for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline. For typical penalties check Guidelines for the Assessment of Penalties.
Appeals: A decision made or penalty imposed under Policy 70 (Student Petitions and Grievances) (other than a petition) or Policy 71 (Student Discipline) may be appealed if there is a ground. A student who believes he/she has a ground for an appeal should refer to Policy 72, Student Appeals.
Turnitin.com: Text matching software (Turnitin®) may be used to screen assignments in this course. Turnitin® is used to verify that all materials and sources in assignments are documented. Students' submissions are stored on a U.S. server, therefore students must be given an alternative (e.g., scaffolded assignment or annotated bibliography), if they are concerned about their privacy and/or security. Students will be given due notice, in the first week of the term and/or at the time assignment details are provided, about arrangements and alternatives for the use of Turnitin in this course.
Note for Students with Disabilities: AccessAbility Services, located in Needles Hall, Room 1401, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with AccessAbility Services at the beginning of each academic term.
It is the responsibility of the student to notify the instructor if they, in the first week of term or at the time assignment details are provided, wish to submit alternate assignment.
-
Intellectual Property: Students should be aware that this course contains the intellectual property of their instructor, TA, and/or the University of Waterloo. Intellectual property includes items such as:
- Lecture content, spoken and written (and any audio/video recording thereof);
- Lecture handouts, presentations, and other materials prepared for the course (e.g., PowerPoint slides);
- Questions or solution sets from various types of assessments (e.g., assignments, quizzes, tests, final exams);
- Work protected by copyright (e.g., any work authored by the instructor or TA or used by the instructor or TA with permission of the copyright owner).
Course materials and the intellectual property contained therein, are used to enhance a student's educational experience. However, sharing this intellectual property without the intellectual property owner's permission is a violation of intellectual property rights. For this reason, it is necessary to ask the instructor, TA and/or the University of Waterloo for permission before uploading and sharing the intellectual property of others online (e.g., to an online repository).
Permission from an instructor, TA or the University is also necessary before sharing the intellectual property of others from completed courses with students taking the same/similar courses in subsequent terms/years. In many cases, instructors might be happy to allow distribution of certain materials. However, doing so without expressed permission is considered a violation of intellectual property rights.
Please alert the instructor if you become aware of intellectual property belonging to others (past or present) circulating, either through the student body or online. The intellectual property rights owner deserves to know (and may have already given their consent).