COMS 4160 Administrivia

Fall, 2005

Instructor: Ravi Ramamoorthi
Office Hours: MW 4-6pm (after class)
If you can't find me in my office, please check in the lab in 6LE4
TA: Akash Garg
Office Hours: MW 1:30-2:30pm in 6LE4
For best results, follow this procedure if you have any questions:
  1. Come to the TA or Professor office hours.
  2. Post your question on the CS4160 Class Bulletin Board in the discussion section of Courseworks.
  3. Send email to the TA at The TAs will only answer questions that are already posted on the class bboard, or are too specific to be of interest to other students.
  4. Send email to the professor. The TA response time is likely to be faster than the professor's.

COMS 4160: Computer Graphics

This course is an introduction to 2-dimensional and 3-dimensional computer graphics. Topics covered include 2-dimensional transformations and clipping, 3-dimensional display techniques, representations and transformations, projection algorithms, Bézier and B-Spline curves, illumination and shading models and rendering. There will be a strong emphasis on the mathematical and geometric aspects of graphics. The course has been taught by me the previous three years ( Fall 2004 , Fall 2003 , Spring 2003 ), and will now be taught regularly every year, likely by me in the Fall.

This will be a hopefully fun course, but will require considerable implementation and understanding. In the past, the main complaint has been from a few students who found the required programming for assignments 3 and 4 difficult, especially since graphics programming in OpenGL is a new skill, and debugging and working with graphical programs requires substantial work, which is difficult to replace by teaching it theoretically. The main advice is to START EARLY on the programming assignments and ask the instructor or TA if you run into any difficulties; we are always ready to help. Most students do successfully complete the assignments, and find the course very rewarding and fun, with the ability to understand the theory behind and implement graphics programs. Also, in recognition of the level of effort required, the course will be graded very generously, so if you do all the work, you will have a lot of fun, and get a very good grade.

Pre-requisites for the course: Solid C/C++ programming background. Linear algebra and some general mathematical skills. (If you only know Java, you may want to consider using this course as an opportunity to become familiar with C++.)

Note: This is the introductory graphics course. A more advanced follow on course (COMS 4162) will be taught by me in the spring. There are a number of other 6000-level courses of interest, taught by the department that you may consider this spring or in future years.


MW 2:40-3:55pm 825 Mudd. Not offered this year on CVN.

Assignments and Exams

There are four projects, comprising primarily of programming. All projects are due by midnight on the dates specified below, unless explicitly stated otherwise. The first two assignments should be completed individually, and the third and fourth in groups of two. For more detail, see the assignments page.  In group assignments, you only need to hand in one copy of the assignment. In this case, it is your responsibility to make sure that you both contribute equally.  That is, we cannot accept "half" of an assignment from you if your partner failed to do his/her part. You can in principle change partners between assignments 3 and 4, but these assignments are closely interlinked, so that is undesirable.

For written questions, we will go over them in class, usually in classes specially designated as review sessions. Doing well on the midterm will require following the material at the level of the content covered in the review sessions. The midterm will perhaps be slightly challenging but generally not too difficult, and will follow the pattern of questions in the review sessions. The midterm will be in class. We will also have two written assignments at the end of the course that will focus on more theoretical questions related to rendering. These assignments are to be completed individually without collaboration. They are not intended to be difficult, but to make sure you at least take the trouble to look up and understand the lecture material at some level. The main grading will be based on completing the programming assignments; the midterm and written assignments are intended to make sure you are paying some attention to the more theoretical aspects of the course. There will be no formal final exam in the course. As noted earlier, the main point is to do well on programming assignments 3 and 4.

Late Policy

Your grade will be whacked 15% (of your actual score) for each 12 hours late (or 30% per day). The late deduction is a step function. That is, you lose 15% of your score for being 1 min late or for being 11 hours 59 minutes late. You lose 30% of your score for being 12 hours and 1 minute late. After 3 days, no credit will be given. No extensions will normally be given, unless for very compelling personal reasons. Additionally, a stronger late policy may be followed for the final assignments to allow for timely grading. Also, if you do want an extension, you must ask for it as far in advance as possible, clearly stating the reason why; we will not usually give extensions close to the deadline or after the fact.


Your final grades will be computed by weighting the assignments as follows.

HW # Written Programming
0 10 0
1 0 30
2 0 40
3 0 70
Midterm 60 0
4 0 130
Written 1 30 0
Written 2 30 0


I would first like to note that it is difficult to find a suitable graphics textbook; they all have their disadvantages. For some of the topics, we will not be following any particular textbook. We will however, try to refer to the relevant textbook material in the lecture notes, or note that this material is not well covered in the book (and make the lecture slides complete). As far as what the course tests, and therefore what you need to focus on in the reading, it will be based on the lecture material. We note here some of the texts we recommend, along with commentary on the book's suitability.

If these books are not available in the bookstore or nearby stores, they are readily available with online booksellers like amazon. Additionally, these books are available as course reserves at the Engineering Library.

Required: Fundamentals of Computer Graphics

by Pete Shirley (2nd edition)

This is a fairly simple text. The second edition is considerably expanded and the chapters are with respect to that. The advantage is that it is easy to follow to get some understanding of the topics. The disadvantage is that the approach and content to the various topics may not quite follow the lectures, and some topics may be treated too simply or not very well at all. Last year, most students liked this textbook, and you should consider having it. However, it may not suffice well for all the material. We will try to be explicit in lecture where we are and are not following the text. If we don't follow the text, we will try to prepare some notes, give out handouts, or make the lecture slides very explicit.

Computer Graphics: Principles and Practice

by Foley, van Dam, Feiner and Hughes

This is widely regarded as the bible of computer graphics, and is a comprehensive text that we will be referring to. If you have further interest in graphics, like are considering taking the more advanced course, I would definitely recommend getting this. If not, I would still recommend being able to follow up in it, in case there are certain topics you want to see in more detail. The main disadvantage is the encyclopedic nature of the text, making the exposition quite complicated, that can go over the head for many students taking graphics for the first time. In many ways, the Shirley text is at the other extreme, and the course (hopefully!!) tries to find a middle path.

Required: The OpenGL Programming Guide Fourth Edition

by Woo et al.

This is a comprehensive tutorial on the Graphics API we will be using for most of the course. If you ever intend to write substantial graphics programs, you should have this book. If you don't buy it, you're probably going to be sharing someone else's, or trying to decipher sample code. Please note that you will be using this primarily as a reference, looking things up as and when you write code. The syllabus below refers to chapters that you will need to know, but that is more as a reference to what we will be covering. In practice, you will gain more by actually doing and looking up what you don't know, rather than just reading the red book end to end.  

Optional: Real Time Rendering Second Edition

by Moller and Haines

This is the best book available on techniques for creating interactive complex renderings.  It explains many of the techniques used by game creators, without focusing too much on the exact details of any one particular system ( like the "Black Art of { mac, windows, etc. } Game Programming" series of books ). This book will probably be most useful as a reference for the final video game project.

In addition to the above, the following books may be of interest for parts of the course. These, as well as many of the texts above are on reserve in the engineering library.


There will be 4 programming assignments. In the the first two assignments, we will provide a fairly complete skeleton of code to get you started. As the course progresses, you will be expected to write more and more of the assignments from scratch. For assignments 3 and 4, you will be completely on your own. You may feel free to re-use code from previous assignments at any time, particularly to handle window setup and interaction.  All the assignments are based on OpenGL, a portable graphics library. Since everything about these assignments is portable, you can do them on any computer you want. We would recommend that you speak to the TA and get access to use the Microsoft Research Lab or MRL if you don't have (or even if you do) an alternative platform. We are only supporting the assignments for Windows. If you use another platform, you are largely on your own for sample solutions, compilation issues etc. and you must make sure HW 1 and HW 2 compile on our machines and you can demo HW 3 and HW 4 for us. Avoid platform specific code, like user interface widgets, since we need to be able to grade your code. If you don't have visual studio, speak to the TA to get a copy. If there are other issues about where to work, again speak to the instructor or TA.

Collaboration Policy

Programming projects are to be implemented either individually (assignments 1 and 2) or in groups of 2 (assignments 3 and 4) from scratch, i.e., you should not derive solutions from existing sources or previous instances of this course. Discussion of programming projects is allowed (encouraged). Copying of solutions or code from other students, or from students who previously took this course is not allowed. If you do obtain substantial help from the instructor, TA or another student, you must document this in your program. A good guideline is that you must be able to explain and/or duplicate anything that you submit. Furthermore, you should in general not copy code from other sources. If in doubt, please ask.

For the written assignments, the midterm will be in class closed book, but will closely follow the material in the review sessions. The written assignments at the end of the course are take home and open book; they will be rather straightforward. For all the written assignments, you are to work individually, with no collaboration with other students.

Lecture schedule and assignment due dates

Broadly, the course is divided into 5 segments (with some fun lectures on animation, real-time rendering and the story of computer graphics thrown in). Note that we will periodically assign lectures to reviewing problems and working out mathematical examples.

The first segment deals with the mathematics of transformations and viewing, telling you how to move and scale objects to place them correctly in the world. This is the basis for assignment 1. The second segment describes how to use Bezier and B-spline curves to interpolate points and create shapes. This is the basis for assignment 2. Together, these segments relate to modeling or creating models of the world you want to make a picture of. The third segment describes OpenGL, the graphics API we will be using, and is the basis for assignment 3. Segment 4 describes how to make images once you have a geometric model of the world, discussing illumination and shading models. It will be tested individually in the first written assignment. The final video game project is open ended and tests if you can synthesize the knowlege from the first four segments to create a compelling interactive graphics system. Finally, segment 5 describes global illumination models and more advanced rendering, beyond the scope of OpenGL, and is the basis for the second written assignment. Together, segments 4 and 5 deal with rendering or creating images of computer graphics models.

Readings are with respect to the Shirley text (second edition; ask me for a conversion if you're using the first edition) unless otherwise noted. Note that the course (and midterms/assignments etc.) is based primarily on the material in lecture; we will not test you on supplementary reading material not covered in lecture. In all of the lectures, we will try to make explicit which sections of the chapters we cover, and how our coverage relates to that in the text and handouts.

The homework will generally be due by midnight on the day following what is listed here. Thus, Homework 0 is actually due by 11:59 pm on Tuesday, Sep 13 and so on.



Due Related Reading
Sep 7 Overview of Computer Graphics, course
Sep 12 Vectors and Linear Algebra Homework 0 2,5
Sep 14 Transformations 1 6
Sep 19 Transformations 2 6,7.2.1, 3.5 RTR (handout)
Sep 21 Viewing Homework 1 3.5 RTR (handout)
Sep 26 Curves 1 (Optional) handout 4-5.1,8.1-3 of CAGD
Sep 28 Curves 2 (Optional) handout above, polar forms paper
Oct 3 Review 1 of curves Curves problems
Oct 5 Review 2 of Curves Homework 2 Curves problems
Oct 10 OpenGL 1 START EARLY HW 3 GL pages 1-50
Oct 12 OpenGL 2 START EARLY HW 3 GL chapters 3,7, early part of 9
Oct 17 OpenGL 3 GL chapters 4,5
Oct 19 Review of Transformations Homework 3 Milestone Transform/OpenGL problems
Oct 24 Review of Viewing/OpenGL Transform/OpenGL problems
Oct 26 In class Midterm
Oct 31 Illumination and Shading 1 9
Nov 2 Illumination and Shading 2 Chapter 2, C&W (handout)
Nov 9 Illumination and Shading 2 (contd) Homework 3 Chapter 2, C&W (handout)
Nov 14 Review of illumination Illumination problems
Nov 16 Story of Computer Graphics Written Ass 1
Nov 21 Texture Mapping 1 Homework 4 Milestone
Nov 23 No class (thanksgiving)
Nov 28 Ray Tracing 10
Nov 30 Global Illumination 2.6.2 handout
Dec 5 Radiosity FvDFH 16.13.1-2
Dec 7 Summary and preview of COMS 4162 HW 4 due Sunday 11
Dec 12 No Lecture: Homework 4 demos Ass 2 due Tue 13, 5pm

Thanks to Greg Humphreys for the layout and parts of the content in these pages.