CMSC 23700
Introduction to Computer Graphics

General Information

Course: CMSC 23700
Introduction to Computer Graphics
Instructor: John Reppy Ryerson 256
TA: Lamont Samuels Ryerson 176
Charisee Chiw Ryerson 176
Lecture: TR 1:30-2:50
Ry 251
Labs: W 3:30-4:50 (Lab 1) CSIL 1
W 5:00-6:20 (Lab 2) CSIL 1
Office hours: 
Monday   10:00-11:00   Reppy Ryerson 256
Wednesday   1:00-3:00   Chiw Ryerson 176
Friday   1:00-2:00pm   Reppy Ryerson 256


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 exam will focus on the mathematical foundations of computer graphics, while while the lab sessions and programming projects deal with translating theory into practice.

Text books

There are two required texts:

Title: Mathematics for 3D Game Programming and Computer Graphics (3rd Edition)
Author: Eric Lengyel
Publisher: Cengage Learning PTR, 2011
Book web site:
Title: OpenGL SuperBible: Comprehensive Tutorial and Reference (6th Edition)
Authorw: Graham Sellers, Richard Wright, and Nicholas Haemel
Publisher: Addison Wesley, 2013
Book web site:

The programming assignments will be written using the C++ programming language. If you are not familier with the language, you may want to pick up a copy of one of the following books:

Title: A Tour of C++
Authors: Stroustrup
Publisher: Addison Wesley
Title: C++ Primer (Fifth Edition)
Authors: Lippman, Lajoie, and Moo
Publisher: Addison Wesley

The Stroustrup text is a relatively short overview of the main features of C++, whereas the Lippman book is a detailed, and long (938 pages) description of the full language. Both books describe the latest version of C++ (the C++11 standard).


Grading for the course will be based on:

Percentage Component
20% Homework assignments (5)
30% Exams (2)
50% Projects (5)

The assignments will be posted on the class website. Homework assignments should be handed in at the beginning of class the day they are due. Programming projects will be automatically collected from your course phoenixforge repository.

In general, late homework and programming assignments will not be accepted, but each student may have one 24-hour extension on one assignment or individual project. You must request the extension before the assignment is due.

Project grades will consist of a correctness portion (worth 70%) and a style portion (worth 30%). Your code must compile. Failure to compile will result in a 0 for the correctness portion of the grade.

Since late assignments are not accepted, the only way that you can get partial credit for a project that you fail to turn in on time is by committing your code to svn early and often. Be sure, however, to make sure that your code compiles (use comments or #ifdef to ellide broken code), since failure to compile results in a zero on the correctness portion of the grade.


The following is a tentative plan for what topics will be covered and when. Readings are denoted as "M3D" for Mathematics for 3D Game Programming and Computer Graphics and "SB" for the OpenGL SuperBible; page ranges are denoted in brackets.

Week Lecture Topics Readings
1 1 Evolution of graphics hardware; the graphics pipeline; programmable shaders M3D:Ch1; SB:Ch1&3
2 Linear algebra crash course: vectors and matrices M3D:Ch2&3
2 3 Transformations; homogeneous coordinates M3D:Ch4; SB:Ch4
4 Geometry; parameterized vs. implicit representations; intersection testing. MD3:Ch5.1-2,Ch6.1-2
3 5 Basic illumination, lighting, and shading M3D:Ch7.1-4,7.6-7; SB12[504-544]
6 Advanced shading: texture maps, normal maps, and procedural texturing M3D:Ch7.5,7.8
4 7 Projections: perspective vs. orthographic; view frustum MD3:Ch5.3-5
8 Character animation; key-frames; interpolation, quaternions MD3:Ch4.6
5 9
10 Shadows M3D:Ch10
6 11 More shadows; Blending M3D:Ch10; SB:Ch9
12 Deferred rendering; the G buffer SB:Ch12[548-558]
7 13 Representing objects as meshes; M3D:Ch9.4-6
14 Parametric surfaces; tessellation shading M3D:Ch11;SB:Ch8[284-310]
8 15 Scene-graphs; bounding volumes; collision detection M3D:Ch12
16 Accelerating rendering: view-frustum culling, spatial data structures M3D:Ch8
9 17 LOD; impostors
18 Physics-based animation MD3:Ch15.2
10 19 GPGPU

Note that not all topics that we cover in class are covered by the texts.


There will two exams given in the evening (7-9pm) on Wednesday February 5th (5th week), and Wednesday March 5th (9th week). The location is to be determined.

Homework assignments

There will be five written homework assignments over the course of the term. Assignments will typically be posted here on Wednesdays and be due at the beginning of class on Thursday the following week. Late homework will not be accepted for credit.

Date Assignment Due date
January 8, 2014 Homework 1 January 16 (in class)
January 22, 2014 Homework 2 January 30 (in class)
February 6, 2014 Homework 3 February 13 (in class)
February 24, 2014 Homework 4 March 4 (in class)


The course will require several programming projects. The projects will be coded in a subset of C++ using the OpenGL 4.1 core profile and the GLFW library (version 3.0.4). This platform is supported by the CSIL Macs, which are running Mac OS X 10.9 (Mavaricks).

We believe that programming style is important, thus 30% of your project grade will be based on style and documentation of your code (the other 70% will be based on correctness). It is also important that your code compile successfully. Code that does not compile will not be graded on correctness.

Date Project Due date
January 13, 2014 Project 1: simple animation [Revised January 19] January 24 (10pm)
January 29, 2014 Project 2: texturing February 3
February 11, 2014 Project 3: animation and shadows February 24
February 26, 2014 Project 4: terrain rendering (part 1) March 10
March 7, 2014 Project 5: terrain rendering (part 2) March 18,

We will use phoenixforge to manage project code and submissions. Your class repository is accessible at

where CNETID is your personal CNet ID (i.e., you email address). You can also login to using your CNet ID and password.

Papers and notes

The following is a list of supplemental documents for topics not covered by the texts. As necessary, we will post revisions here.

Date Document
February 21 Note on Meshes
March 4 Compositing Digital Images by Thomas Porter and Tom Duff

Other sources of information

The piazza page for this course. Please post questions about lectures, homework, and projects to piazza, but please \textbf{do not post significant blocks of code}. If you are registered for this class, then you should have received an invitation that was sent to your email address. Please let us know as soon as possible if you have not received an invitation.
The OpenGL home page.
The OpenGL 4.1 API Quick Reference Card
The OpenGL 4.4 Manual pages
Note that these manual pages describe some features that were added after version 4.1, but you can use the "Notes" section of the page to determine when a feature was added.
The OpenGL Shading Language Specification Version 4.10.6 (pdf)
The OpenGL Graphics System: A Specification (Version 4.1 Core Profile) (pdf)
GLFW documentation
General information, tutorials, and library documentation for C++
lldb tutorial
Lldb has replaced gdb as the standard debugger on Mac OS X.
What every computer scientist should know about floating-point arithmetic
A useful guide to some of the issues that arise when computing with floating-point.
Apple Technical Note TN2093
This technical note gives pointers on optimizing OpenGL performance on MacOS X systems.
Apple Technical Note TN2124
This techincal note describes various MacOS X specific debugging tools and techniques.
GNU make manual
Doxygen manual
OpenGL Programming Guide for Mac
This manual describes best practices for OpenGL programming on Mac OS X.
OpenGL Profiler User Guide
User guide for Apple's OpenGL Profiling tool. This tool is useful for debugging OpenGL applications, since it allows one to set breakpoints on OpenGL calls and to view the state of the OpenGL pipeline. There is also an overview of the tool here.

Academic Honesty

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.

Last revised: March 7, 2014