CMSC 23700
Introduction to Computer Graphics
Fall 2015

General Information

Course: CMSC 23700
Introduction to Computer Graphics
Instructor: John Reppy Ryerson 256
TAs: Lamont Samuels  
Tri Huynh  
Lecture: TR 1:30-2:50
Ry 251
Labs: W 2:30-3:50    Lab 1 (CSIL 1)
W 4:00-5:20 Lab 2 (CSIL 1)
Office hours:   M 2:00-3:00 Reppy (Ryerson 256)
  W 11:00-1:00 Huynh (Ryerson 255)
  F 1:00-2:00 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 exams focus on algorithms, data structures, and 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 (7th Edition)
Authorw: Graham Sellers, Richard Wright, and Nicholas Haemel
Publisher: Addison Wesley, 2015
Book web site:

Note that the 6th Edition of the OpenGL SuperBible is also sufficient for the course, but if you are going to buy a new copy, you should get the 7th Edition.

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 (6)

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. There are no extensions on group projects.

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 Activity Topics Readings
1 Lect. 1 Evolution of graphics hardware; the graphics pipeline; programmable shaders M3D:Ch1; SB:Ch1&3
Lab. 1 Introduction to OpenGL SB:Ch2
Lect. 2 Linear algebra crash course: vectors and matrices M3D:Ch2&3
2 Lect. 3 More linear algebra; transforms; homogeneous coordinates; quaternions M3D:Ch3&4; SB:Ch4
Lab. 2 Shader Programs & 3D Transformations; GLFW Key & Mouse Events SB:Ch6
Lect. 4 Geometry; parameterized vs. implicit representations; intersection testing. MD3:Ch5.1-2,Ch6.1-2
3 Lect. 5 Projections: perspective vs. orthographic; view frustum MD3:Ch5.3-5; SB:Ch4
Lab. 3 Texturing objects; per-pixel lighting computations SB:Ch5[137-176]
Lect. 6 Basic illumination, lighting, and shading M3D:Ch7.1-4,7.6-7; SB:Ch13
4 Lect. 7 Advanced shading: texture maps, normal maps, and procedural texturing M3D:Ch7.5,7.8; SB:Ch5[152-199]
Lab. 4 Shadows M3D:Ch10; SB:Ch13[599-605]
Lect. 8 Offscreen rendering; framebuffers & depthbuffers SB:Ch9[390-412]
5 Lect. 9 More shadows; blending SB:Ch9[382-390]
Lab. 5 Open Lab
Lect. 10 Deferred rendering; the G buffer SB:Ch9[390-397],Ch13[613-624]
6 Lect. 11 Accelerating rendering ‐ bounding volumes and view-frustum culling M3D:Ch12
Lab. 6 Deferred rendering & Culling
Lect. 12 Accelerating rendering ‐ spatial data structures; collision detection M3D:Ch8
7 Lect. 13 Meshes; LOD; imposters M3D:Ch9.4-6
Lab. 7 Open Lab
Lect. 14 Parametric surfaces; tessellation shading M3D:Ch11; SB:Ch8[305-333]
8 Lect. 15 Terrain rendering
Lab. 8 Terrain rendering
Lect. 16 Animation ‐ interpolation of key frames
9 Lect. 17 Animation ‐ physics-based animation MD3:Ch15.2
No lab; Thanksgiving
10 Lect. 18 GPGPU
Lab. 9 Open Lab

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


There will two exams given in the evening on Tuesday November 3 (6th week) and Tuesday December 1st (10th week). The exams will run from 7pm to 9pm and held in Saeih Hall 146.

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
October 1, 2015 Homework 1 [Updated 2015-10-05] October 8 (at the beginning of class)
October 14, 2015 Homework 2 October 22 (at the beginning of class)
October 29, 2015 Homework 3 November 10 (at the beginning of class)
November 12, 2015 Homework 4 November 19 (at the beginning of class)
November 24, 2015 Homework 5 December 3 (due during special office hours)


The course will require six 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.10 (Yosemite).

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; i.e. it will get a zero on the correctness part of the grade.

Project's 4 and 5 together constitute the final project. For students enrolled in CMSC23700, you will be free to work in pairs; students in CMSC33700 will do individual projects. Project 5 will be due at 12 noon on Tuesday, December 8. Furtheremore, there will be final project demos from 1:30-3pm on Tuesday (location TBA).

Date Project Due date
October 2, 2015 Project 1: Basic OpenGL Rendering [Updated 2015-10-05] October 12, 2015 (10pm)
October 12, 2015 Project 2: Shading and Lighting October 19, 2015 (10pm)
October 20, 2015 Project 3: Advanced Lighting Techniques [Description updated 2015-10-22] November 2, 2015 (10pm)
November 4, 2015 Project 4: Deferred Rendering November 16, 2015 (10pm)
November 15, 2015 Project 5: Terrain Rendering (part 1) November 24, 2015 (10pm)
November 21, 2015 Project 6: Terrain Rendering (part 2) December 8, 2015 (12 noon)

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.


Here you will find class information and supplemental reading for topics not covered by the texts. As necessary, we will post revisions here.

Date Document
September 29 Course information
November 12 Notes on polygon meshes

Lab materials

Here you will find links to materials that are presented in the Lab sessions.
September 30 Lab 1: OpenGL Basics
October 7 Lab 2: Shader Programs & 3D Transformations; GLFW Key & Mouse Events
October 14 Lab 3: Texturing Objects & Per-Pixel Lighting Computations
October 21 Lab 4: Shadow Mapping
November 6 Lab 6: Deferred Rendering

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
October 29 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.
Documentation for the CS23700 Common Library Code
This documentation is generated from the sources using doxygen. This documentation is incomplete, but it does list all of the provided types and operations in the library.
The OpenGL home page.
The OpenGL Wiki
This wiki covers many of the important concepts and techniques of modern OpenGL.
The OpenGL 4.1 API Quick Reference Card
The OpenGL 4.5 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: November 17, 2015