Course Syllabus



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
TAs: Zack Misso and Themis Haris


MWF, 11:30 – 12:35 pm, Carson 60


Tu, 12:15 – 1:05 pm, Carson 60

Office Hours

Tu/Th, 3:00 - 3:50, 156 Sudikoff

Zack: Wed 2-3pm, Fri 10-11am, @ tables near Sudi 163

Themis: Tu 5-6 pm, Fri 4-5pm @ Sudi 251

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. You'll be programming in Javascript and WebGL. While we will not explicitly teach the details of these languages, they should be relatively easy to pick up if you are 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 "Ray tracing in one weekend" e-book by Peter Shirley forms a great companion to the more formal writing of our class textbook. I highly recommend getting this book and reading it. It is a quick read and will help you complete your assignments.

You can download this book for free here. Alternatively, you can purchase the Kindle version of it from Amazon (half of the proceeds of these sales go to Hack the Hood, a really neat organization).

In the reading listings on the calendar, we will refer to these books as the "Tiger book" and the "RTIOW 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 version (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:

  • (any portion of) 1 hour late: max 90%
  • max 75% for any portion of 1 day late thereafter
  • max 25% for any portion of 2 days late thereafter
  • no credit for more than 2 days late

Exception to this rule might be made for special cases only if you inform the professor well (e.g. >1 week, not a couple days) before the deadline in writing, 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 it 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

Students with disabilities who may need disability-related academic adjustments and services for this course should see me privately within the first week of class. Students requiring disability-related academic adjustments and services must consult the Student Accessibility Services office (Carson Hall, Suite 125, 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.

Mental Health

The academic environment at Dartmouth is challenging, our terms are intensive, and classes are not the only demanding part of your life. There are a number of resources available to you on campus to support your wellness, including your undergraduate dean, the Student Wellness Center, and Counseling and Human Development.

Course Summary:

Date Details Due