CMSC 23700: Introduction to Computer Graphics

The course provides an introduction to computer graphics, covering fundamental concepts and techniques including: rasterization, sampling, image/signal processing basics, convolutions, coordinate spaces, transformations, camera viewing, 3D transformations, ray tracing, 3D processing, parameterization, animation/deformations, and more. Assignments will be in Python.
Logistics
- Canvas
- Course Meetings: Tuesday & Thursday, 5:00pm - 6:20pm (RY 251)
- Lab Meetings:
- L01/L02 Monday 3:00pm–4:20pm (CSIL3/CSIL4)
- L03/L04 Monday 4:30pm–5:50pm (CSIL3/CSIL4)
- Course Communication: all outside-of-class-meeting course communication will occur on the UChicago Intro to Computer Graphics Slack
- Office hours:
- Nam Anh Thursday 2:30PM-3:30PM (JCL 207)
- Jinfan Zhou Tuesday 1:00PM-2:00PM (JCL 207)
- Tian Yu Friday 3:00PM-4:00PM (JCL 207)
- Rana Wednesday 11:30-12:30PM (JCL 369)
Grading & Policies
- 15% Assignment 1: Intro to SVG and 2D Rasterization
- 17.5% Assignment 2: 3D Rasterization and Camera Viewpoint Geometry
- 17.5% Assignment 3: Mesh Data Structures
- 15% Assignment 4: Skinning and Rigging
- 35% Final Project: Animation-Off
Late assignments. You have a "late bank" of 72 hours that you may use throughout the quarter on any of the assignments. After 3 days (or your "late bank" is empty) the assignment will no longer be accepted. Assignments are given in advance with enough notice, so please plan accordingly.
Academic Honesty. All assignments will be individual. Do not discuss or share your solutions/code with other students, don't post solutions online and do not copy from existing code bases online. We run an auto-grader in this course which automatically runs a sophisticated plagiarism detector. This class adheres to the same policies outlined in CMSC 12100 Fall 2021.
Generative AI. The goal of this course is to get you familiar with the high-level concepts of Computer Graphics. While Generative AI can be extremely helpful for productivity or boilerplate tasks during coding - the assignments in this course do not have any boilerplate elements. The assignments are meant to help solidify the course concepts. We have found that over reliance on generative AI tools can significantly hinder student learning. While we discourage the use of Generative AI, we do not prohibit it entirely. When using GenAI you must always credit it in your documentation.pdf writeup for each assignment. Be extremely cautious when using such tools (they have no sense of what is correct or not and may produce plausible-looking code that contains errors). The following are the only permissible uses of generative AI:
- You may use autocomplete tools like Github Copilot to complete individual lines of code, as long as you understand exactly what that line of code is producing. You should exercise caution when repeatedly using this functionality (i.e., generating several lines one after the other). You do not need to cite the autocomplete-based tool for helping write small/individual blocks of code. However, you must credit the autocomplete tool if you use it to generate an entire function/method, or a substantial block of code. Include a docstring or comment stating that the code was generated with an AI tool (naming the tool involved).
- You can take a piece of code we’ve provided to you, and ask a GenAI questions about that code (If you do this you MUST include the questions and GenAI answers in your documentation.pdf writeup for each assignment)
- You can ask GenAI to write a simple and small blocks of code, e.g., "write a for loop" is OK, asking how to do matrix multiplication in numpy is OK
- You may use GenAI tools to answer conceptual questions that will supplement your learning (imagine GenAI as a helpful but fallible classmate)
The following are NOT permissible uses of generative AI:
- You may not use generative AI to describe your code or write any parts of your documentation.pdf (you must describe what you did with your own words)
- Generating more than 3 lines of code at a time from a generative model is not allowed (this includes sequentially)
- The generative model should not be used to solve the main intellectual aspect of assignment. For example, you may NOT ask GenAI to write a function to rasterize triangles.
- Presenting the outputs of generative AI as one's own work, without explicit citation and acknowledgment of what specifically was used from such models is not allowed
Course Schedule
| Week | Date | Topic | Materials |
|---|---|---|---|
| 1 | Tues Jan 6 | Intro & Motivation | slides |
| Thurs Jan 8 | Triangles & Rasterization | slides | |
| 2 | Tues Jan 13 | Coordinate Spaces & Transformations | slides |
| Thurs Jan 15 | 3D Rotations (& Assignment 2 Intro) | slides | |
| 3 | Tues Jan 20 | Textures | slides |
| Thur Jan 22 | Depth & Transparency | slides | |
| 4 | Tues Jan 27 | Intro to Geometry | slides |
| Thur Jan 29 | Meshes & Half Edge Data Structure | slides | |
| 5 | Tues Feb 3 | Geometry Processing | slides |
| Thur Feb 5 | Geometric Queries | slides | |
| 6 | Tues Feb 10 | Intro to Animation | slides |
| Thur Feb 12 | Conformal Parameterization (Richard) | slides | |
| 7 | Tues Feb 17 | Rigging | slides |
| Thur Feb 19 | Skinning | slides | |
| 8 | Tues Feb 24 | Shading/Materials | slides |
| Thur Feb 26 | Illumination/MC | slides | |
| 9 | Tues March 3 | Final Project Pt. 1 | |
| Thur March 5 | Final Project Pt. 2 |
Assignment Schedule
| Assignment | Release | Due | Labs |
|---|---|---|---|
| 1 | Thurs Jan 8 | Fri Jan 16 | Lab 2 |
| 2 | Fri Jan 16 | Wed Jan 28 | Lab 3 |
| 3 | Thurs Jan 29 | Sat Feb 14 | Lab 5 & 6 |
| Final project (part A) | Tues Feb 10 | Sun Feb 22 | Lab 7 |
| 4 | Fri Feb 20 | Sun March 1 | Lab 8 |
| Final project | Sun Feb 15 | Tues March 3 | Lab 9 |
Useful Resources
There is no required textbook, though the following will be useful:
- Fundamentals of Computer Graphics. Steve Marschner and Pete Shirley 2021
Instructional Team
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
| Rana Hanocka | Nam Anh Dinh | Jinfan Zhou | Tian Yang |



