General Information


John Reppy


Xiao Zhang


TR 14:00-15:20

Ryerson 276


W 16:00-17:20

CSIL 1 (in JCL)

Course Description

This course aims to provide an introduction to the basic concepts and techniques used in 3D computer graphics. The focus is on real-time rendering techniques, such as those found in computer games. These include: coordinate systems and transformations; geometric modeling; the programmable graphics pipeline; level-of detail optimizations; and rendering techniques.

The course covers both the theory and practice of computer graphics. The lectures, homework assignments and exams focus on algorithms, data structures, and the mathematical foundations of computer graphics, while the lab sessions and programming projects deal with translating theory into practice.

Office Hours

We have scheduled in-person office hours Mondays and Fridays.

Weekday Time Host and Location



John Reppy (JCL 253)



Xiao Zhang (JCL 207)

You may also schedule a meeting (either in-person or via Zoom) with the instructor by sending email to


The following is a tentative plan for what topics will be covered and when.

Week Date Activity Topics


Sept. 26

Lecture 1

Course introduction; the graphics pipeline; evolution of graphics hardware and software.

Sept. 27

Lab 1

Introduction to Vulkan

Sept. 28

Lecture 2

Linear algebra crash course: vectors and matrices


Oct. 4

Lecture 3

More linear algebra; transforms; homogeneous coordinates; quaternions

Oct. 5

Lab 2

GLFW Key & Mouse Events; communicating with Vulkan

Oct. 6

Lecture 4

Geometry; parameterized vs. implicit representations; intersection testing.


Oct. 10

Lecture 5

More geometry and projections

Oct. 11

Lab 3

Shader Programs & 3D Transformations

Oct. 12

Lecture 6



Oct. 17

Lecture 7

Rasterization, basic illumination, lighting, and shading

Oct. 18

Lab 4

Texturing & per-pixel computations

Oct. 19

Lecture 8

Advanced shading: texture maps, normal maps, procedural texturing, and blending


Oct. 24

Lecture 9

Shadows; Blending

Oct. 25

Lab 5

Offscreen Rendering and Shadow Maps

Oct. 26

Lecture 10

Deferred rendering; the G buffer


Oct. 31

Lecture 11

Mesh representations of objects

Nov. 1

Lab 6

Deferred Rendering

Nov. 2

Lecture 12

Spatial data structures, bounding volumes, spatial partitions


Nov. 7

Lecture 13

Accelerating rendering — view-frustum culling, etc.

Nov. 8


Group Project Overview

Nov. 9

Lecture 14

Terrain rendering; Parametric surfaces; Tessellation shading


Nov. 14

Lecture 15

Exam Review

Nov. 15

(no Lab)


Nov. 16

Lecture 16

Animation ‐- interpolation of key frames

Thanksgiving Break


Nov. 28

Lecture 17

Animation ‐- physics-based animation; particle systems

Nov. 29


Project help

Nov. 30

Lecture 18

GPU-based ray tracing

Exam week


Final Project Demos

Course Work

The course will have four kinds of assignments:

  • Homework assignments

  • Lab assignments

  • Individual projects

  • Group project

In addition, there will be a two-hour exam on the evening of Wednesday, November 15.

Homework Assignments

Homework assignments are written assignments that cover the material discussed in lecture. We expect that there will be 5—​6 homework assignments, which will be assigned on Fridays and due the following Thursday at the start of class.

Lab Assignments

There will be small programing exercises associated with the lab sessions. These are designed to introduce you to the features of Vulkan and to the techniques that you will need for working on the individual projects.

Lab assignments are not graded.

Individual Projects

There will be four individual programming assignments. These assignments will be coded in C++17 using the Vulkan graphics API. Details about the software we use in this course can be found here. This software is installed on the CSIL Macs.

We believe that programming style is important, your grade will be based on style and documentation of your code, as well as on correctness). It is also important that your code compile successfully.

Code that does not compile will not be graded.

Group Project

For the Group Project, you will work in pairs (although you can work individually, if you prefer). This project consists of two parts: the first part will have a fixed set of features that you will be required to implement, while the second part will be mored free-form where you will choose enhancements that you want add to your project (there is one required enhancement).

There will be a demo session for the group projects during exam week. The demo session will be held in CSIL-1 from 12:30-2:30 on Thursday, December 7th.

Resources for the project can be found here.


There will be an exam on Wednesday November 15 at 7pm in JCL 223. It will be a two-hour, open-notes, written exam.

Late Work Policy and Re-submission

Late work will not be accepted. If you do not have time to complete an assignment, you should submit what you can at the deadline and then use the resubmission mechanism to complete it.

Each student has two opportunities to resubmit a revised solution to an assignment. Resubmission can be used for either the written homework assignments or the individual programming projects (but not the group project). You have one week from when a graded assignment is returned to submit a revised version for regrading.

In extraordinary circumstances (e.g., family death, serious accident/illness), I may grant an extension. In such a case, please ask your college advisor to contact me before the deadline.

Text Books

The class has one required and one recommended text books. These are the first two volumes in the Foundations of Game Engine Development series by Eric Lengyel. Unfortunately, the only way to acquire these books is to order them from Amazon (there are links on the above website).

The first volume is required:

Foundations of Game Engine Development Volume 1: Mathematics
by Eric Lengyel, 2016
IBSN: 978-0-9858117-4-7

We suggest that you also purchase the second volume in the series:

Foundations of Game Engine Development Volume 2: Rendering
by Eric Lengyel, 2019
IBSN: 978-0-9858117-5-4


If you have trouble obtaining the text, an alternative (by the same author) is
Mathematics for 3D Game Programming and Computer Graphics
by Eric Lengyel, 2012
IBSN: 978-1-4354-5886-4

For those who are interested in further reading, a good overview of computer graphics is

Fundamentals of Computer Graphics (5th Edition)
by Steve Marschner and Peter Shirley, CRC Press, 2021.
ISBN 978-0-3675050-3-5

Programming Resources

The CMSC 23700 Software Environment webpage describes the software libraries and tools that we are using. It also has links to documentation of these systems, as well as links to online sources of information about graphics and C++ programming.

Academic Honesty


The following discussion is owed to Stuart Kurtz

The University of Chicago is a scholarly academic community. You need to both understand and internalize the ethics of our community. A good place to start is with the Cadet’s Honor Code of the US Military Academy: "A Cadet will not lie, cheat, or steal, or tolerate those who do." It is important to understand that the notion of property that matters most to academics is ideas, and that to pass someone else’s ideas off as your own is to lie, cheat, and steal.

The University has a formal policy on Academic Honesty, which is somewhat more verbose than West Point’s. Even so, you should read and understand it.

We believe that student interactions are an important and useful means to mastery of the material. We recommend that you discuss the material in this class with other students, and that includes the homework assignments. So what is the boundary between acceptable collaboration and academic misconduct? First, while it is acceptable to discuss homework, it is not acceptable to turn in someone else’s work as your own. When the time comes to write down your answer, you should write it down yourself from your own memory. Moreover, you should cite any material discussions, or written sources, e.g.,

Note: I discussed this exercise with Jane Smith.

The University’s policy, for its relative length, says less than it should regarding the culpability of those who know of misconduct by others, but do not report it. An all too common case has been where one student has decided to "help" another student by giving them a copy of their assignment, only to have that other student copy it and turn it in. In such cases, we view both students as culpable and pursue disciplinary sanctions against both.

For the student collaborations, it can be a slippery slope that leads from sanctioned collaboration to outright misconduct. But for all the slipperyness, there is a clear line: present only your ideas as yours and attribute all others.

If you have any questions about what is or is not proper academic conduct, please ask your instructors.