COMS W4160 Computer Graphics

Spring 2015, Columbia University

TR 11:40pm-12:55PM, 633 Seeley W. Mudd Building

Instructor: Changxi Zheng


Yun Fei                  (Ph.D. TA,
Divyansh Agarwal (M.S. TA,

Office Hours


date topic reading assignments
22Jan Introduction and Preview (slides)    
27Jan --- class cancelled (due to snowstorm) ---  
29Jan Math Preliminaries (slides) Hello World example code  
3Feb Geometric Transformations (slides)    
5Feb Geometric Transformations in 3D (slides)    
10Feb 3D Rotation and Quaternions (slides) Quaternion intro, tutorial Paper homework released
12Feb Quaternion and its Interpolation (slides)  
17Feb Forward Kinematics (slides) Blender rigging example paper homework due
19Feb Data structures of triangle meshes (slides)   PA-1 released
24Feb Inverse Kinematics (slides) a survey of inverse kinematics  
26Feb Preliminary of physics-based simulation (slides)    
3Mar Spline curves (slides)    
5Mar Bezier Splines (slides)    
10Mar Mid-term    
12Mar Graphics Pipeline (slides)   PA-2 released
17Mar --- Spring break ---    
19Mar --- Spring break ---    
24Mar Graphics Pipeline (slides)    
26Mar GPU Shader (slides)    
31Mar GLSL Introduction GLSL Tutorial; GLSL Syntax  
2Apr Ray Tracing Algorithm (slides)   PA-3 released
7Apr Geometric Optics (slides)    
9Apr Monte-Carlo Integration some derivation of Monte-Carlo sampling  
14Apr Monte-carlo Integration intro of Monte-Carlo raytracing Final project proposal due
16Apr Introduction of Photon Mapping (slides)   PA-4 released
21Apr Texture Mapping (slides-1, slides-2) OpenGL Cubemap tutorial-1, tutorial-2  

Projects and Work Load

You fun of this class starts from a paper homework with a few mathematical problems, followed by 4 programming projects throughout the semester and a final project. For the programming projects, you will be asked to implement some computer graphics algorithms. For the final project, you will propose a project which involves computer graphics techniques that you learn in this class. All projects should be implmented in Java and will be submitted to courseworks.

Due: Saturday, Mar. 7, 2015, Saturday (11:59pm)

Starter code: download

In this programming assignment, you will have fun learning how to build an interactive graphics application in OpenGL. There are several graphics functionality requirements that your code must satisfy. While implementing these requirements, you are encouraged to use your imagination and creativity. Your program can be a video game, creation of a virtual world, or a clip of OpenGL animation. It is totally up to you.

Please find the detailed assignment handout here.

Due: Part 1 (Forward kinematics): Saturday, Mar. 24, 2015, Tuesday (11:59pm)
         Part 2 (Inverse kinematics): Saturday, Apr. 2, 2015, Thursday (11:59pm)

Starter code: download

In this programming assignment, you will animate and pose 3D articulated characters by implementing forward and inverse kinematic methods as discussed in class. You should be able to animate character joint angles to demonstrate character moving (forward kinematics), as well as pose the character by dragging the points on screen and moving the skeletons (inverse kinematics).

Please find the detailed assignment handout here.

Due: Apr. 12, 2015, Sunday (11:59pm)

Starter code: download

This is a relatively easy assignment! You will have fun learning how to write GPU shaders using GLSL language. Shader programming has been widely used in high-performance interactive graphics applications such as video games. In this assignement, there are a few types of shaders you are required to implement. While implementing these requirements, you are free to draw some complex shapes.

Please find the detailed assignment handout here.

Due: May 1st, 2015, Friday (11:59pm)

Starter code: download

Ray tracing is a simple yet powerful algorithm for rendering photorealistic images. Within the accuracy of the scene and shading models and with enough computing time, the images produced by a ray tracer can be physically accurate and appear indistinguishable from real images. In this assignment, you will implement several simple rendering algorithms. They might not be very efficient, but they will be capable of rendering basic geometry as well as complex mesh models represented by triangle meshes.

Please find the detailed assignment handout here.



There will be no final exam in this course. But there will be a mid-term quiz and a final project.

Recommended Textbook

Shirley & Marschner,
Fundamentals of Computer Graphics
third edition

Supplemental books and materials:

About COMS W4162

Grading: 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 of the assignments and exam. 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 midterm prelim will cover the first half of the course. The format will be similar to paper homeworks, textbook material and questions. It will be 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 details.

Due dates and late assignments Paper homework should be handled in after the lecture on the due date. 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. These options are just intended to give you a chance to reduce the effect of zeros averaged into your grade.

Questions, help, discussion: The instructors and TAs are available to answer questions, advise on projects, or just to discuss interesting topics related to the class at office hours and by appointment as needed. For electronic communication we are using Piazza (link also available at the top of this page). Please sign up for the Piazza page. When posting questions, please keep them organized by posting them to specific folders.

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 encouraged 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 is 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: We expect complete integrity from everyone. We assume the work you hand in is your own, and the results you hand in are generated by your program. You're welcome to read whatever you want to learn what you need to do the work, but we do expect you to build your own implementations of the methods we are studying. If you're ever in doubt, just include a citation in your code or report indicating where some idea came from, whether it be a classmate, a web site, another piece of software, or anything—this always maintains your honesty, whether the source was used in a good way or not. The principle is that 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 (or is original to you and your partner, if you're handing in as a pair) unless you cite a source for it. it's never OK for you to see another student's homework writeup or another team's program code, and certainly never OK to copy parts of one person's or team's writeup, code, or results into another's, even if the general solution was worked out together.

School 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 you can't complete the work on your own, come talk to the professor or the TAs, or your advisor, 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.