COMS W4160 Computer Graphics
Spring 2014

About COMS W4160, Spring 2014

Changxi Zheng, cxz at
   office hours: 11AM-12 Noon Friday, 616 CEPSR

Dingzeyu Li, dli at
 office hours: 4PM-6PM Tuesday, 6LE4 CEPSR
Yun Fei, yf2320 at
 office hours: 2PM-6PM Wednesday, 6LE4 CEPSR

Time and place:
TR 11:40AM–12:55PM, 535 Seeley W. Mudd Building

Shirley et al. Fundamentals of Computer Graphics, third edition (required)
For the 2nd edition, Peter Shirley maintains a list of errors here.
The 2nd edition is also available online as an ebook via the Columbia library link.
You need a Columbia UNI to access the full text.

Supplemental books and materials:




The plan of homework is not completely determined. We would like to leave it flexible, and might slightly adjust it based on the over progress of this course.

There will be a few textbook readings assigned in class, 1 short paper homework, 4 programming assignments, and 1 final project. The paper home work will involve things like working out numerical or other short answers (which should always be backed up by some brief reasoning), answering "why" questions, and drawing graphs or other pictures. It may be handwritten or printed and is to be turned in at the beginning of class on the due date. After it is graded, we will return it back to you.

Programming assignments

There will be four programming assignments as part of the course. To help you make progress, some of the assigments may be split into a few sub-assigments. Here is a tentative list of the assigments:

  1. Hello World!: An interactive OpenGL application: a small video game.
  2. Animation: Forward and inverse kinematics for character animations.
  3. Pipeline: A software model of a modern programmable graphics processor, using vertex and fragment processing to achieve a variety of rendering effects.
  4. Ray Tracing: A simple yet full-featured ray tracer that can handle large models and do advanced shading, including texture mapping and reflections in shiny surfaces.

All the code should compile on the CLIC machines (or remotely if you have properly set up the connection). To help you learn the programming, we will provide you some example code to illustrate certain functionalities. But you are free to learn by the plenty of examples online (see the supplemental links above). These programs are to be done alone.

We encourage you to code in C++. But if you really prefer Java (with JOGL), it is possible to use it to code your assignments. But you should talk to the instructor first. And we probably won't provide Java starter code.

To ease your validation and debug of the code, for certain assignments we will provide a few test cases and the expect results. So you can compare them with your own results to (partially) verify your code.


There will be 1 in-class prelim as the midterm. Time: TBD


Each homework to be graded will be scored out of 4 points on a 4.5-point scale:

Your final grade will be a weighted average of the grades on the assignments and exams. The paper homeworks will account for 8% of the grade, the program assignments will account for 56% (14% each), the in-class prelim will account for 11%, and the final project will account for 25%.

The prelim will cover the first half of the course. It will largely be similar to paper homeworks, textbook material and questions.

All exams are closed book, but you are allowed to bring one letter-sized piece of paper with writing on both sides, to avoid the need to memorize things.

Due dates and late assignments

Programming assignments are due at 11:59 pm on the due date and are accepted with a late penalty.

  1. Hand in by late deadline within 1 day: you get 85% of your score
  2. Hand in by late deadline within 2 day: you get 70% of your score
  3. Hand in by late deadline within 3 day: you get 50% of your score
  4. Hand in by late deadline within 4 day: you get 20% of your score
  5. More than 4 days late: no credit

Assignments that are handed in under option 2 will not be graded carefully and may be returned very late. There options are just intended to give you a chance to reduce the effect of zeros averaged into your grade.


An assignment is an academic document, like a journal article. When you turn it in, you are claiming that everything in it is your original idea unless you cite a source for it. In short, you are expected to submit your own solution of all the coursework.


You are welcome (encouraged, even) to discuss the homeworks and projects among yourselves in general terms. But when you start writing up the homeworks or implementing the projects, you need to be working alone. In particular, it is never permitted for you to see another student's homework writeup or other's program code, and certainly never tolerated to copy parts of one person's writeup, code, or results into another's, even if the general solution was worked out together.

You're also welcome to read any published sources—books, articles, public web sites—that help you learn. If you find an idea in one of these sources that becomes part of your solution (or even gives you the whole solution), that's fine, but it's imperative that you explicitly cite the source on your homework or state it in a comment of your code. Otherwise you would be falsely claiming to have invented the idea yourself.

Academic Integrity

In this course, we expect complete integrity from everyone. School life can be stressful, and your coursework and other factors can put you under a lot of pressure, but that is never a reason for dishonesty. If you feel stressful to complete the course work on your own, come to talk to the professor or the TAs, and we can help you figure out what to do. Think before you hand in!

Clear-cut cases of dishonesty will result in failing the course.

For more information see Columbia Engineering's Code of Academic Integrity.

Open-Door Policy

We hope the course to run smoothly and enjoyably. Feel free to let us know if you find the course helpful and interesting. Especially, let us know sooner about the reverse. Drop by our office hours, leave us a note, or send us an email.


We hope you enjoy the class! Have fun!