CS 445/645: Introduction to Computer Graphics, Fall 2003

Greg Humphreys


Time: 5-6:15 Tuesday and Thursday
Place: Olsson 011
Instructor: Greg Humphreys, humper@cs.virginia.edu
Office hours: Friday, 2-4 (Olsson 216)
TA: Gordon Marx, gcm3z@cs.virginia.edu
Office hours: Sunday 9-11, Monday 5-7 (Small Hall)
Students: Who took the course this year?
Description: This course introduces the fundamental algorithms and techniques for 2D and 3D computer graphics.   Students will be well prepared to take any of our advanced courses in computer graphics.

This course will not teach the use of graphic design software such as Maya, 3D Studio Max, or Photoshop, but rather the fundamental underpinnings of these programs. Students will use the OpenGL graphics API, but again the focus of the course is on the underlying mechanisms of OpenGL rather than its sophisticated use.

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

Required Background: This course requires substantial programming effort.  Standard C/C++ concepts such as pointers, lists, and memory allocation will be used extensively.  We expect students to be comfortable implementing non-trivial data structures, and to be able to debug simple programming errors on their own.  Students will be expected to learn the OpenGL programming API on their own using the textbook and online examples to complete the assignments.

The lecture material and exams will also make frequent use of geometry, basic linear algebra (vector and matrix arithmetic), and calculus (both differential and integral).

Texts: The OpenGL Programming Guide 3rd Edition: The Official Guide to Learning OpenGL Version 1.2 by Mason Woo et al., Addison-Wesley (1997).
Lectures: A tentative schedule of lecture topics is given below.  Lecture notes and/or slides from class will be posted here as the semester progresses.
 
  Date

Topic
(click for lecture notes / slides)

Assignments
1 8/28 Introduction  
2 9/2 Raster Graphics and Color  
3 9/4 Image Processing, Sampling
4 9/9 Image Warping, Compositing, and Morphing Impressionist Painter due
5 9/11 3D Rendering  
6 9/16 Ray Casting  
7 9/18 SINGING IN THE RAIN  
8 9/23 Local Illumination Image Processing due
9 9/25 Transformations  
10 9/30 Viewing, 3D Graphics Pipeline  
11 10/2 Clipping  
12 10/7 Scan Conversion I: Lines, Circles, Fractals Raytracer due
13 10/9 Scan Conversion II: Polygons  
14 10/14 READING HOLIDAY  
15 10/16 Exam 1 - In class  
16 10/21 Animation (Dave Brogan) Circles due
17 10/23 Texture Mapping  
18 10/28 Visibility  
18.5 10/30 Movie Time Extra Reading
19 11/4 Curved Lines Rubiks Cube due
20 11/6 Curved Surfaces  
21 11/11 Subdivision Surfaces  
22 11/13 Modeling Grab Bag  
23 11/18 Programmable Graphics Hardware (Dave Luebke) Curves due
24 11/20 Global Illumination  
25 11/25 Project Proposals Project Proposals due
26 11/27 THANKSGIVING  
27 12/2 Exam 2 - In class  
28 12/4 Scalable Graphics  
Grading: Your final grade will be a weighted combination of your performance on the assignments during the course.  Programming assignments are collectively worth 50% of your grade, exams are collectively worth 25% of your grade, and the final project is worth 25% of your grade.  However, no student will pass the course without submitting all assignments and completing all exams.

Assignments will be graded on a 100-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 will not debug them for you after you've turned them in.  TEST YOUR PROGRAMS!

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.  We are serious about this.

Assignments one day late subtract 33 points; two days late loses 33 more. 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.  Note that late days are calendar days, not school days.  No exceptions for holidays or weekends.  Late days do not apply to examinations or to final projects.

Late days are designed to compensate for unforseen circumstances, such as unusual simultaneous course loads, network outages, disk drive crashes, and the like.

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 for any reason.  You must write and debug your own code.