Computer Graphics (FA18)



This course provides a broad introduction to the mathematical and programmatic foundations of computer graphics, including modeling, rendering (drawing), and animating three-dimensional scenes. Topics include digital image representation, two- and three-dimensional shape representations (e.g. parametric curves and surfaces, meshes, subdivision surfaces), geometrical transformations (e.g. rotations, scales, translations, and perspective projection), rigging and skinning, the rasterization pipeline, ray tracing, illumination and shading models, texturing, and light & visual perception. Coursework typically includes a mix of programming assignments, quizzes/hand-written work, assigned readings, and a final project. Knowledge of basic linear algebra and programming skills are assumed.


  • CS 50
  • CS 11 (or MATH 22 or 24)
  • or instructor's permission

Students will need to be comfortable with concepts from linear algebra, algorithms and data structures.

Course staff

Instructor: Wojciech Jarosz
TA: Benedikt Bitterli


MWF, 11:30 – 12:35 pm, Moore 110


Tu, 12:15 – 1:05 pm, Moore 110

Office Hours

M, 3:30 - 4:20, 156 Sudikoff
Tu, 4:00 - 4:50, 156 Sudikoff

Th, 3:00-4:00, Outside Sudikoff 163 (at the black tables)
F, 3:15 - 4:15, Outside Sudikoff 163 (at the black tables)

Lectures & Coursework

This is a project-based course, and the majority of your grade will come from programming assignments, which you'll find in the Assignments section of the website. The assignments in the first half of the class will be in Javascript and WebGL, and in the second half we will use C++. While we will not explicitly teach the details of these languages, they should be relatively easy to pick up for students already familiar with languages like C and Java. There will also be in-class hand-written quizzes. I will post slides online after lecture, which you can access in the Files section, or by clicking on the corresponding lecture in the course Calendar. Check the weekly schedule below.


The required textbook for the class is Fundamentals of Computer Graphics, by Shirley and Marschner, 3rd edition or newer. You can buy the physical book at your favorite bookstore, or you can access the digital version (from Dartmouth IP addresses) here. There will be required reading from this book each week to supplement the material discussed in lecture. The reading you should do before coming to lecture will be listed on the corresponding lecture event in the Calendar.


In the second half of the term you will write a basic ray tracer. Once you start working on these assignments, the mini e-books by Peter Shirley form a great complement to the more formal writing of our class textbook. While not required, I highly recommend getting and reading them. They are a quick read and will help you complete your assignments.

  1. Ray Tracing in One Weekend
  2. Ray Tracing: The Next Week

In the reading listings on the calendar, we will refer to these books as the "Tiger book", "RTIOW e-book", and "RTTNW e-book".

Grading Scheme

The tentative grading scheme will be:

  • 45%: Programming assignments
  • 30%: Quizzes
  • 15%: Final project
  • 10%: Participation/engagement
Disclaimer: The grade breakdown is subject to slight adjustments.

Graduate & Extra Credit

Grads and undergrads enrolled in the class will be graded separately and we will generally grade grads more strictly. Additionally, the programming assignments will typically include extra portions that will be required for students enrolled in the graduate versiom (CS 177) and may count as extra credit for those enrolled as undergrad (CS 77). We will grade these separately and grant extra credit only if the foundation of the original assignment has been completed correctly (e.g., at least 90% of the original requirements/grade are met). Extra credit will not exceed 20% of the overall grade.

At the end of the course, extra credit will not be added directly to your score. Instead, we will consider your extra credit to potentially round your grade more favorably when discretizing to letter grades.

Submission Deadlines & Grading

You will turn in their code through Canvas, and each assignment will have a strict deadline. We will strive to post programming assignment grades on Canvas within roughly two weeks of the due date. Some assignments will build off of each other, so you do not want to fall behind!

Late policy (updated):

  • 1% deduction for each (portion of an) hour for the first 24 hours
  • 2% deduction for each (portion of an) hour for the next 24 hours
  • 3% deduction for each (portion of an) hour thereafter

For example, if you submit 15 minutes late, we will deduce 1% from your assignment. If you submit 140 minutes late, we will deduce 3%. Submitting 50 hours late results in a 24*1 + 2*24 + 2*3 = 78% deduction.

Exception to this rule might be made for special cases only if the professor is informed well (e.g. >1 week, not a couple days) before the deadline, or in the case of a medical emergency, and at the professor’s sole discretion.

It’s up to you to check that assignments have been successfully submitted to Canvas; if there are any problems, you must notify course staff by email immediately (not weeks later, claiming “Canvas ate it”).


We will be using Piazza for class discussion.

To set up Piazza, first log on to Canvas. This should take you to the Canvas page for this class, but if not, select “Rendering Algorithms (GSA17)” from the “Courses” dropdown. Then, click on “Piazza” on the left side and register using your full email address and a unique password (don’t re-use your Dartmouth NetID password!).

If you have registered with Canvas using your full address before, then your account should already be properly set up. If you registered using a different email, you’ll need to add your address to your Piazza account settings for it to link properly with Canvas.

E-mail the course staff for Piazza access if you are auditing or yet to register.

Piazza is the place for you to ask questions and get help. This allows your classmates to benefit from seeing the question and subsequent instructor response. We encourage you to contribute answers to other people’s threads, or initiate open-ended discussions on topics relevant to the class.

Working together & Academic integrity

In short: You are welcome and encouraged to chat about assignments with other students in general terms, but code must be written on your own.

I 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 complete the work, but I 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 and report indicating where some idea came from, whether it be a classmate, a website, another piece of software, or anything—this always maintains your honesty, whether the source was used in a good way or not. The same basic principle applies to your presentations. Any material you reuse from outside sources must be properly attributed.

The example scenarios below (adapted from Tom Cormen's discussion of the honor principle) should give you a more concrete idea of what is and is not acceptable.


Accessibility Needs & Religious Observances

Students with disabilities who may need disability-related academic adjustments and services for this course are encouraged to see me privately as early in the term as possible. Students requiring disability-related academic adjustments and services must consult the Student Accessibility Services office (205 Collis Student Center, 646-9900, Once SAS has authorized services, students must show the originally signed SAS Services and Consent Form and/or a letter on SAS letterhead to me. As a first step, if you have questions about whether you qualify to receive academic adjustments and services, you should contact the SAS office. All inquiries and discussions will remain confidential.

Some students may wish to take part in religious observances that occur during this academic term. If you have a religious observance that conflicts with your participation in the course, please meet with me before the end of the second week of the term to discuss appropriate accommodations.

Course Summary:

Date Details Due