CMSC 23700
Introduction to Computer Graphics

General Information

Course: CMSC 23700
Introduction to Computer Graphics
Instructor: John Reppy Hinds 033
TAs: Jon Riehl Hinds 024A
Aren Jansen Ry 257
Lecture: TR 1:30-2:50
Ry 251
Lab: W 3:30-4:50
Mac Lab
Office hours: 
Monday 10:00-12:00   Reppy   Hinds 033
Tuesday 4:00-6:00 Riehl Mac Lab
Wednesday   1:30-3:30 Riehl Mac Lab
Thursday 3:00-5:00 Jansen Mac Lab
Friday 2:00-4:00 Jansen Mac Lab
Mailing list:


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 graphics pipeline; level-of detail optimizations; and rendering techniques using programmable shaders.

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 & Computer Graphics (2nd Edition)
Author: Eric Lengyel
Publisher: Charles River Media, 2004
Title: OpenGL -- A Primer (3rd edition)
Author: Edward Angel
Publisher: Addison Wesley, 2008
The programming assignments will be written using the C programming language (specifically, the C99 version). If you do not have a good C manual, we recommend the following:
Title: C -- A Reference Manual (5th Edition)
Authors: Samuel P. Harbison and Guy L. Steele Jr.
Publisher: Prentice Hall, 2002


Grading for the course will be based on:

Percentage Component
20% Homework assignments
30% Midterm Exam (Feb. 13; Pick Hall 016)
50% Projects

Paper copies of the assignments will be distributed in lecture and electronic copies will be made available for the course web page. 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 gforge repository. In general, late homework and programming assignments will not be accepted, although valid excuses delivered before the assignment is due will be considered.

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.

Homework assignments

There will be homework assignments over the course of the term. Homework is due at the beginning of class and late homework will not be accepted for credit.
Date Assignment Due date
January 8 Homework 1 January 22
January 22 Homework 2 January 29
January 31 Homework 3 February 7
February 21 Homework 4 February 28


The course will require several programming projects. We believe that programming style is important, thus 30% of your project grade will be based on style and documentation of your code.
Project 1 [revised]
Project-1 is a animation of balls bouncing in a box. It involves OpenGL lighting, an event-based simulation, and simple sphere-sphere and sphere-plane collision detection.

Project 2
Project-2 extends the first project by adding per-pixel lighting using programmable shaders.

Project 3 [revised]
Project-3 extends the second project by adding shadows using the shadow-mapping technique.
There is an errata page that lists corrections to the sample code.

Project 4 [revised]
Project 4 is the first part of the final project. It involves precomputing shadows for a terrain specified as a heightfield.
Test maps:
Map 0 (33x33)
Screen shot of heightfield
Map 1 (513x513)
Screen shot of heightfield
Screen shot of shadow texture
Map 2 (1025x1025)
Screen shot of heightfield
Screen shot of shadow texture
Map 3 (1025x1025)
Screen shot of heightfield
Screen shot of shadow texture
This map is the same as Map 2, except that the sun is at a lower angle and thus the shadows are longer.

Project 5


The following is a list of the other handouts that have been distributed in class with links to PDF files. As necessary, we will post revisions here.

Date Handout
January 8 Course information [revised]
January 9 Lab tips [revised]

Sample code

A simple demo of an OpenGL animation. This code illustrates the programming style and level of documentation that we expect.
The brick shaders
The vertex shander and fragment shader for the bricks example we discussed in class (including the OpenGL Shader Builder project).

Other sources of information

The OpenGL home page.

Apple's OpenGL page

This page has links to a number of useful resources for using OpenGL on Mac OS X.

The GLUT Specification (html)

Features of the OpenGL Shading Language (pdf)

This document provides an overview of the major features of the OpenGL Shading language.

The OpenGL Shading Language Specification (pdf)

OpenGL Shading Language API Man Pages (at 3Dlabs)

The Omniverous Biped's FAQ's

This page is a collection of useful notes by Steve Baker on OpenGL and graphics programming. Of particular interest for this course are his notes on OpenGL lighting, Z-buffers, and matrices.

What every computer scientist should know about floating-point

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 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.

OpenGL Driver Monitor User Guide

User guide for Apple's OpenGL Monitoring tool.

Understanding Xcode Projects

This web page gives an overview of the structure of Xcode projects.

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 4, 2008.