This brief syllabus has the basic info. Really the course web is the syllabus, and most topics here are discussed in more detail somewhere (links provided from this document – although this document is written first, so that the links may appear later).

Basic Info

Lectures: Tuesdays and Thursdays, 11:00-12:15, Computer Sciences 1240 (NOTE LOCATION CHANGE!!!)
You are responsible for the material in lecture, and we might have in-class activities that are counted.

Instructor: Eftychios Sifakis, Office 6387 Computer Sciences. For class-related email, please use the email address This will reach both the instructor and the TA.

Instructor Office hours: The instructors regular office hours will be 3:00pm – 3:45pm on Tuesdays (Room 6387). We will also make an effort to set up an extra in-class office hour, probably immediately before or immediately after the lecture – details on this will be posted here, once a replacement classroom has been assigned for us.

TA: Kevin Zhang. It is important that when you send email to “the TA” you use the common email address

TA Office hours: Wednesdays 2:30-3:30pm and Thursdays 1:00-2:00pm (Room CS 5364)

Piazza discussion page: We will use Piazza for online discussion between students (and the instructor/TA). The Piazza site for our class is found here. You are strongly encouraged to post any questions (even if addressed to the TA/instructor) on Piazza, if there is any chance that your colleagues might be able to help with an answer and/or if other students are likely to benefit from the answer. The instructor and TA will be strongly motivated to more promptly answer questions posted on Piazza, rather than individually communicated through the class email.

Pre-requisites: Officially CS367 – but really the ability to write non-trivial programs.
Note: Math 320 or 340 (linear algebra) is no longer a pre-requisite. (see discussion)

Announcements and Email: Announcements will be made to this website, and you are responsible for checking it regularly. We will send email to your university provided email (sometimes via the university provided mailing list). If we receive email from you, it should be from your University email account (so we know it is from a student).

We will use Canvas as a course management system. This will be the primary mechanisms for turning in assignments, however the course web will be the primary mechanism for staff to make announcements. We will try to duplicate announcements on Canvas.

Email/Communication policy: We will do our best to respond in a timely fashion (within 24-48 hours) to questions posted by email or Piazza. Please be prepared, however, for the possibility of an answer to an email question taking longer – in the worst case, you might only receive an answer at a time closer to the next upcoming class lecture.

Exams: There will be a mandatory final exam in the University scheduled time slot (Thursday May 11th, 10:05am-12:05pm). There will be an evening mid-term exam (Thursday March 2nd, 7:15-9:15pm). It will be very difficult to change exam times. If you cannot make an exam slot, please contact the Professor well in advance.

Books: The textbooks will be made available online. See the books posting.

Computing Environment: All assignments will be run in a web browser. You may use Chrome or Firefox. You will have the ability to tell us if your program has only been tested on one or the other.

Many of the assignments will work better if you use a computer with graphics hardware (a dedicated GPU), however, almost any reasonably recent and decent computer will do. The CSL Windows labs are equipped with computers meant for graphics work.

Previous course offerings: This semester will be quite different previous offerings of CS559 prior to Fall2015. Many new experimental elements were first introduced in the Fall2015 offering.

Learning Objectives: Students have an understanding of the key ideas of Computer Graphics, and are able to apply them in programming projects. See the discussion of Key Ideas and Learning Goals.

Tentative list of topics

  • Basic concepts, coordinate systems, pixels
  • Linear Algebra, Transforms in 2D and 3D, Hierarchy
  • Drawing in 3D: Projection, Viewing, Visibility
  • Graphics Hardware, Shaders, WebGL/OpenGL
  • Lighting
  • Texturing
  • Interactive graphics tricks
  • Shape Representation: Meshes, Curves, Surfaces
  • Color and Perception
  • Image Processing and Computational Photography
  • Realistic Rendering and Ray Tracing

Course Components

  • There will be a number of reading assignments, with a new one being posted typically every 1-2 weeks. For your convenience, the readings will be categorized into “required” and “recommended/supplemental”. The required readings are essential, and will be considered as known material for assignments and exams. The recommended/supplemental readings will be there to help you better understand the concepts from the required reading, as well as lectures, that you may read when you think you need them.
  • There will be regular online quizzes, often given out to you in conjunction with a reading assignment. These will be small, online checks to help you check that you have understood the reading. They will be designed so that you can succeed (or keep trying until you do succeed). Grading will be check/no check, and given that you are allowed to take the quizzes as many times as you wish (only the best score is recorded), we will typically require that you get all answers correct (it will not be more than 5-7 questions per quiz) to get a check.
  • The quizzes will be based on the material covered in lectures and assigned required readings.
  • There will be regular (typically weekly) programming assignments (throughout the duration of the class, except for the exam week and Thanksgiving). Generally, these will be small, although some of them will be grouped together and constitute pieces of a more significant project. See the Grading section below for an explanation of how your programming assignments are to be graded. The programming assignments are the most crucial contributor to your class grade.
  • For some programming assignments, there will be “optional” parts. You can only get credit for the optional parts after doing the basic parts. Credit for these parts raises your grade.
  • There are no explicit “projects” this semester – however, sequences of assignments will build on one another and turn into bigger things.
  • There will be a midterm and a final exam.


The different components of the class are all important: to get a good grade you must perform adequately in all of them. That being said, your performance in the programming assignments provides a baseline, on which the online quizzes and the exams act on as modifiers that can either boost or lower your grade. The following notes explain what “adequate performance” implies on each of the evaluation methods used in class.

Quizzes (linked to reading assignments) are designed to be very accessible to everyone – if you miss a question you should be able to review the readings or your notes from class and get it right on the next attempt. Canvas will be set to only record your best performance across all attempts at a given quiz, so you are free to retake the quiz over and over without fear of deteriorating your grade. If you have completed (e.g. got all questions right in one of your attempts) for “almost all” of the reading assignments, you have performed adequately as far as the quizzes go. Historically, 9-out-of-10 students get a perfect grade on the reading assignments, so an adequate performance just clears the way for your grade to be determined by the programming assignments & exams (with the exception of students that might otherwise qualify for a C-grade or lower, that might get a small boost from doing perfect in the quizzes). Missing a significant amount of quizzes can incur a penalty (up to a half-letter grade).

Programming assignments are graded, in principle, with one of three verdicts : Check / No-Check / Above-And-Beyond. However, on Canvas you will see a numerical grade in the range from 0-5. Here is how you should interpret these scores.

  • A numerical grade of “3” is what we consider a “Check”. Every programming assignment will explain what you need to do to get a Check – if you fulfill all these requirements you will be awarded a numerical score of 3 or higher (depending on how many extras you have also included). This is a good score, which we expect most of the students to be awarded every week. As explained later, scoring “3”s or better on all programming assignments, in combination with doing all the quizzes and doing “decent” on exams will guarantee you at least a “B” grade in class.
  • A numerical grade of “4” is what we classify as an “Above-and-beyond” effort. Every programming assignment will describe opportunities and bells-and-whistles that you can try to add to your deliverables to take a shot at this grade. If you implement enough extras, you will be awarded this higher grade.
  • A numerical grade of “5” will be awarded only for “WOW” programming assignments, that venture way beyond what we tentatively proposed as suggested “extras” in the assignment description. This is only reserved for truly exceptional results, and will not be awarded to more than 1-4 students in each programming assignment (maybe none, even). It is perfectly and absolutely possible for a student to earn a strong “A” in class, without ever turning in a “5”-level assignment (in fact, most of the “A”s will be for students with several 4s in their programming grades, that have also done well in exams).
  • Numerical grades in the “0-2” range qualify as No-Check verdicts. We will, however, make note of various levels of non-adequacy in such assignments that are turned in, to acknowledge different degrees of deficiency. An assignment that was never turned in, or cannot run in our computers due to programming error will be given a “0”. A numerical grade of “2” might be given to a program that barely meets the necessary requirements, but was turned in late — or a program that misses one key requirement stated by the assignment description (while fulfilling others, and turned in on time). A grade of “1” might be an assignment that is significantly deficient in the stated requirements, or one that is somewhat deficient and turned in late.
    The impact of getting even a “2” (no-check) in a programming assignment vs. a “3” (check) is significant – it might take a couple of “4”-level hand-ins to forgive a single “2” grade. Lower no-check numerical scores might be even more difficult to make up for (but the details will have to depend on the final curve used for grading the entire class).

Exams will be graded numerically on a 0-100 scale, and you will be given a crude guideline of what letter grades each score corresponds to (based on the curve resulting from the performance of the whole class). Exam performance can only boost your final score by a maximum of a half letter grade : A student that would otherwise score a “B” in class, that turns in a clear “A”-level performance in the exams will likely be boosted to an AB. If your exam score is within a half letter grade above your other performance metrics, to one letter grade below it, it will probably not change your final score (unless your score based on assignments was really on the verge between 2 different grades). The maximum harm that the exam can do for you is to depress your grade by one quarter of a letter grade; i.e. if your grade (excluding exams) is a weak/gratuitous “B”, and your exam score is C/D, you will probably be pushed down to a BC (but if the same student had a “BC” exam grade, that would not be enough to move him/her from the “B” that would otherwise be awarded).

To reiterate, if you perform adequately in quizzes (i.e. correct answers in “almost all” quizzes), programming assignments (a score of “3” in all of them) and score no less than a C/BC in the exams, you will be guaranteed a “B” grade in this class.

To get better than a B, you need to (i) have adequate overall performance, as defined above, and (ii) go “beyond the minimums” on several of the course components; this should include a combination of an “above and beyond” in programming assignments, doing optional parts of programming assignments, and doing better than average on the exams. Students competing for an A grade would typically perform very well (top 30-percentile) in all course components, and excel (top 15-percentile) in at least one of the most challenging aspects (larger assignments, project, exams).

This will make more sense when you see the actual assignments.

Late Policy

Things are due on the specified day. If something is due on a Friday, it can be turned in anytime by Friday 11:59pm.

Late assignments will be accepted, but they must be turned in at least one day before the next assignment is due. Lateness will be considered in grading. If you’re consistently late, you will be penalized.