CS 445: Introduction to Computer Graphics

Cross-listed as CS 645; see below

Time: 3:30 - 4:45 Tue-Thu
Place: MEC 214
Instructor: David Luebke (Olsson #219), luebke@cs.virginia.edu
Office hours: By appointment
Assistant: Salvatore Guarnieri, sg8u@virginia.edu
Office hours: M 11-12 am, W 10-11 am, in Thornton Stacks

Ewen Cheslack-Postava, elc5d@virginia.edu
Office hours: W 8-10 pm, Th 8-10 pm, in Thornton Stacks

Description: This course teaches the fundamental mathematics, algorithms, techniques, and programming skills for 2D and 3D graphics. Students will be well prepared to take any of our advanced courses in computer graphics.

This is not a course in the use of graphics software such as Photoshop or Maya. Rather, the course will teach the underpinnings of those programs. Although students will use OpenGL in this course, the focus will be on the underlying mechanisms of OpenGL rather than its sophisticated use.

E-mail: Catch up on mail's you've missed on the class e-mail archive.
Forum: The course forum is where you should post questions, make helpful suggestions, pitch ideas for a final project, etc.
Feedback: Send the instructor anonymous feedback.
Grades: Check your grades on toolkit.
Facilities: Students should be able to use the machines in most ITC labs, including Stacks. All of these machines are running Windows XP with the latest version of Microsoft's development environment. We can provide you with a copy of Visual Studio .NET for your home use at no charge. Although OpenGL code tends to be fairly portable, your assignments will be graded on the Windows platform. Your code must build on this platform, else it will not be graded.

We also have access to 13 machines in OLS 002a.  These machines have low-end but programmable graphics cards (NVIDIA GeForceFX 5200's),which we may require for some of the assignments. The machines run 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). Note that we are sharing this lab with Prof Humphrey's Operating Systems course, so availability of the lab machines could be an issue; you will find it easier and less stressful to complete your assignments on time if you start early.

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 may do some 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: This course requires substantial programming effort. This course will require you to learn new APIs from books and online resources, and write non-trivial programs from scratch (e.g., no skeleton code).

In addition, lectures will make frequent use of basic concepts from linear algebra (vectors and matrices), geometry, trigonometry, and calculus (integral and differential). You should be comfortable with these concepts.

Followups: There are a number of followup courses to this one if you are interested in computer graphics.

CS440: Computer Graphics for Film Production relates to the special effects industry, with a focus on compositing, effects, and production pipelines. Students produce their own short films incorporating computer-generated imagery.

CS446: Real Time Rendering covers modern practice in interactive computer graphics, with a focus on video game engine design and programmable graphics hardware.

CS447: Image Synthesis teaches the fundamentals of physically-based rendering. This is a mathematically intense course that focuses on the efficient simulation of the interaction of light with matter to create a photorealistic image.

CS448: Animation covers the acquisition and simulation of motion for producing convincing computer-generated animations.

CS551: Modern Research in Computer Graphics is a one-credit weekly reading seminar in which we discuss recent results in computer graphics research. Students are expected to present one paper from a recent conference, as well as discuss some of their own work. This course is open to students pursuing research in the computer graphics group.

The OpenGL Programming Guide 4th Edition, ISBN 0-321-17348-1.
The Cg Tutorial, ISBN 0-321-19496-9.
Lectures: A tentative schedule of lecture topics is given below.  Lecture notes from class will be posted here as the semester progresses.
Lecture Date Topic Assignments
1 1/20 Introduction, demos  
2 1/25 Display hardware  
3 1/27 The rendering pipeline
4 2/1 OpenGL overview OpenGL Warmup due
5 2/3 Transformations
6 2/8 Clipping  
7 2/10 Clipping, Rasterization I (Lines)  
8 2/15 Rasterization II (Triangles) Tank game due
9 2/17 Rasterization III (Polygons), Visibility I (BSP)  
10 2/22 Visibility II (Z-buffer)  
11 2/24 Visibility III (Occlusion culling)  
12 3/1

Local illumination


13 3/3 (Guest lecture) Color Clipping due
-- 3/5 - 3/13


14 3/15

Recap & Q/A for midterm

-- 3/17


15 3/22 Texturing I (basics)
16 3/24 Texturing II (MIP mapping, bump maps, etc)
17 3/29 Programmable hardware
18 4/5 GPGPU  
19 4/7 (Guest lecture) Ray tracing I  
20 4/12 (Guest lecture) Ray tracing II/ImgSyn Prev  
21 4/14 (Guest lecture) Animation preview Lighting, NPR & programmable graphics due
22 4/19 Antialiasing I: Signal processing basics
23 4/21 Antialiasing II: Prefiltering & stochastic sampling
24 4/26 Level of Detail
25 4/28 Shadows
26 5/3 Review Ray tracer due
Project proposals due
-- 5/13 Project presentations (5-7 PM):


Grading: Your final grade will be a weighted average of your performance on the assignments, exams, and final project. Assignments are worth 50%, the exams are worth 25%, and the project is 25%. However, you must turn in all assignments to pass the course.

New: the final project is optional for CS 445 students (still required for CS 645).  If you choose not to do the final project, the assignments will be worth 60%, the midterm 15% and the final 25%. 

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 turned in one day late lose 33%, two days late lose another 33%, and after that the assignment is 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 circumstances such as illness, unusual simultaneous course loads, network outages, disk drive crashes, vacations, scheduled family gatherings, and the like. Of course, you may use them as you see fit.

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. If you ever find yourself looking at another student's code for any reason, you are in violation of this policy (unless explicitly allowed).