CS 445: Introduction to Computer Graphics

Cross-listed as CS 645; see below

Time: 10-11 MWF
Place: MEC 214
Instructor: David Luebke (Olsson #219), luebke@cs.virginia.edu
Office hours: By appointment
Assistants: Nate Hoobler, nsh3h@virginia.edu
Office hours: Tuesday/Thursday, 2:00p-3:30p
Description: This course introduces techniques for 2D and 3D computer graphics, including modeling and representation, illumination and shading, rendering, texturing, and advanced software tools. The student will learn fundamental algorithms and techniques and gain the knowledge necessary to understand and augment the latest innovations in computer graphics.

This course will not teach the use of graphic design software such as Maya or 3D Studio Max (though we may incorporate such software in an assignment), but rather the fundamental underpinnings of these programs. Students will learn and use the OpenGL graphics API, but again the focus of the course is on the underlying mechanisms of OpenGL rather than its sophisticated use.

E-mail: Send e-mail to the class or catch up on mail's you've missed on the class e-mail page.
Feedback: Send the instructors anonymous feedback.
Grades: Check your grades on toolkit.
Lab: We have access to 13 machines in OLS 002a.  These machines are modern CPUs with modern graphics cards (NVIDIA GeForce3s), running Windows XP and Linux.  You can get a key to this room from Ginny Hilton at the CS front desk if you don't currently have a key that works (many of you probably have keys already).

All assignments will use these machines as a base platform.  If your assignment does not compile and run on these machines, using Visual Studio 7 (a.k.a. VS.NET) under Windows XP, then it will not be graded.  If this happens, you will have to rework your assignment so that it does work on these machines, and take the corresponding late penalty.  In other words, work at home at your own risk.  Incidentally, you can download a (legitimate) copy of VS.NET for free.  See me for details.

We are sharing this lab with Prof Humphrey's Operating Systems course, so I will coordinate my assignments with his to avoid massive logjams in the lab.  Nonetheless, availability of the lab machines will be an issue and you will find it easier and less stressful to complete your assignments on time if you start early.  If you find availability is a real issue, don't fight about it; instead, let me know and Prof Humphrey and I will try to work something out.

Assignments: There will be around five programming assignments in this course. All assignments must be written in C or C++ using OpenGL and GLUT libraries. No prior knowledge of OpenGL is required for this course, as you will learn it during the semester.

Students registered for CS 445 will do the programming assignments in pairs.  This is necessary to reduce the grading load (we have only one undergraduate teaching assistant) as well as the demand on lab machines (see above).

Your source code will be read. Source code documentation and organization should make your programs easy to read and convey your understanding of the implemented functions. Poor documentation and programming style will result in a lower score. More detailed instructions regarding required documentation will be provided with each assignment.

Format: Project-oriented, with multiple programming assignments. Two tests.

The graduate-level course CS 645 is being taught through the same lectures, but with slightly different requirements for the assignments. 

Prerequisites: Because the course requires heavy programming experience, a grade of C or better in CS 216 is a prerequisite. Data structures (pointers, lists, and memory allocation) will be used extensively.

We will make frequent use of geometry, basic linear algebra (vector and matrix arithmetic), and a bit of calculus.

Computer Graphics, 2nd Edition, C Version, Donald Hearn and M. Pauline Baker, Prentice-Hall Inc. (1997).
See also:
OpenGL Supplement, Hearn & Baker (free on-line OpenGL primer for the text).
Strongly recommended:
The OpenGL Programming Guide 3rd Edition: The Official Guide to Learning OpenGL Version 1.2 by Mason Woo et al., Addison-Wesley (1997).
FLTK Programmer's Guide
OpenGL Programming Guide (slightly out of date, and of questionable copyright provenance, but useful nonetheless).
Lectures: A tentative schedule of lecture topics is given below.  Lecture notes from class will be posted here as the semester progresses.
Number Date Topic Text Assignments
1 1/15 Introduction, mathematical review I A-1 to A-4  
2 1/17 Mathematical review II    
3 1/20 Display hardware 2-1 to 2-4
(somewhat outdated)
Assn 0 out (FLTK)
4 1/22 The rendering pipeline I 12-1 to 12-2  
5 1/24 The rendering pipeline II   Assn 1 out (Basic OpenGL)
6 1/27 Transformations I; Intro to OpenGL 11-1 to 11-4
(skip quaternion disc)
7 1/29 Transformations II    
8 1/31 Transformations III 12-3 to 12-5  
9 2/3 Clipping I: lines 6-5 Assn 1 due
10 2/5 Clipping II: polygons 6-6 to 6-8  
11 2/7 Clipping III: 3D    
12 2/10 Clipping IV 3-1 to 3-2, 3-5 Assn 2 out (Clipping)
13 2/12 Rasterization I: Lines    
14 2/14 Rasterization I: Lines    
-- 2/17 CANCELLED (SNOW DAY)    
15 2/19 Rasterization II: Triangles 3-11 thru p. 126 Assn 2 due
(one free late day)
16 2/21 Rasterization III: Triangles    
17 2/24 Rasterization IV: Polygons    (Drop deadline!)
18 2/26 Color 15  
19 2/28 Lighting I 14-1 to 14-2, 14-5  
--   Spring Break:
Sat March 1 - Sun March 9
20 3/10 Lighting II    
21 3/12 Shading
Review for midterm
-- 3/14 MIDTERM EXAMINATION   Assn 3 out (Lighting)
22 3/17 Visibility I: Introduction, BSP 13-1 to 13-10  
23 3/19 Visibility II: BSP, Z-Buffer    
24 3/21 Visibility III: View-frustum culling, cells & portals    
25 3/24 Texturing I 14-9  
-- 3/26 CANCELLED    
26 3/28 Making Movies (Guest Lecture)   Assn 3 due
27 3/31 Texturing II    
28 4/2 Texturing III    
-- 4/2
6 PM
Makeup class: Midterm recap    
29 4/4 Programmable Hardware I handout: Cg guide  
30 4/7 Programmable Hardware II   Assn 4a out
31 4/9 Ray Tracing I (Guest Lecture) 14-6  
32 4/11 Ray Tracing II (Guest Lecture)    
33 4/14 Antialiasing I
(transparencies for these lectures)
4-8 Assn 4a due
(Withdraw deadline)
34 4/16 Antialiasing II: Signal processing    
35 4/18 Antialiasing III: Prefiltering   Assignment 4b/4c out
36 4/21 Antialiasing IV: Supersampling    
37 4/23 Antialiasing V: Stochastic sampling    
38 4/25 Non-photorealistic rendering 14-7  
-- 4/28 Optional review session
  Assignment 4b/4c due
[Late days allowed, but must be turned in by 11:59 PM Wed 30 April]
-- 5/2 Optional assignment 5 (ray tracer)   Assignment 5 out
-- 5/9 Last day of finals   Assignment 5 due
Grading: The final grade will be calculated as a weighted average:

CS 445:

  • Assignments:  50% 
  • Midterm:   20% 10%
  • Final:   30%
  • Instructor Evaluation: 10%
CS 645:
  • Assignments:  45% 
  • Midterm:   20% 15%
  • Final:   35%
  • Participation:  5%
Assignments will be graded on a 10-point scale. No credit will be given for assignments that do not compile, or otherwise completely fail (e.g., the dreaded "black screen" effect).  We want to provide a rapid turnaround on your assignments and simply do not have time to debug them for you after you've turned them in.

"Instructor evaluation" is primarily influenced by participation and by peer evaluations on paired programming assignments throughout the semester. These measure how well you were able to work with others on your projects. Note that only CS 445 students do the assignments in pairs. "Participation" means coming to class, asking questions, taking part in discussions, not falling asleep, and so on.

I also reserve the right to institute quizzes (announced or unannounced).

Late Assignments: Assignments are always due at the beginning of class.  If an assignment is not done at the beginning of class it is considered one day late. This is to prevent people from skipping class to finish up the assignment.  Assignments not due on a class day are due at 11:59 PM of the due date.

Assignments one day late subtract an additional 1 point; two days late loses 3 points. After 2 days the assignment will be considered a zero.

However, each student has 5 late days to use at their own discretion over the course of the semester.  Each late day extends the due date by 24 hours.  If you submit an assignment after the due date, you must explicitly state the number of late days you wish to apply to the assignment.  With this flexibility built into the late policy, no other excuses will be accepted without a note from the Dean's office.

On paired assignments, each student can choose how many late days to use for the assignment.  For example, for an assignment two days late, one student could use two late days for full credit, while the other could use just one for a 10% penalty.

Honor Code: The honor code applies to all work turned in for this course. In particular, all code and documentation should be entirely your own work. You may consult with other students about high-level design strategies related to programming assignments, but you many not copy code or use the structure or organization of another students program. Said another way, you may talk with one another about your programs, but you cannot ever look at another student's code nor let another student look at your own code.

Of course, these policies do not apply to your partner in a paired assignments.