TR: 8:00am-9:30am, 75 Shannon Street room 224
Philip Caplan
  • 75 Shannon Street, room 219
    Middlebury, VT 05753  map
  • 1 (802) 243-5707
  • pcaplan@middlebury.edu
  • Office Hours: Mondays 4-5pm (office), Tuesdays 11am-12pm (office), Thursdays 12:30-1:30pm (office), Fridays 1:30-2:30pm (office) , and by appointment
  • You can call me Philip, or Professor Philip if you prefer.
  • Please don't email me about bugs.
  • Assignments must be handed in on time, unless you have a compelling reason and let me know > 48 hours in advance.
  • Fridays 2:30pm-3:30pm (Sabrina) in east lounge of 75 Shannon Street (at the window)

Learning Objectives

By the end of the course, you will be able to

  • display and manipulate three-dimensional models using scanline rendering techniques,
  • animate three-dimensional objects and physical systems,
  • develop your own ray tracer to create realistic renderings.

In order to achieve these goals, you will

  • write mesh data to the GPU using WebGL (coordinates, indices, normals and colors) and subsequently draw the data,
  • setup all matrices necessary to transform your mesh from model space to screen space,
  • shade your surfaces using the Phong shading model,
  • evaluate and render cubic Bezier curves,
  • setup basic mesh data structures to manipulate meshes efficiently for a particular application,
  • texture your surfaces to "cut-and-paste" an image onto your mesh,
  • animate characters using rigging and skinning techniques,
  • animate physical systems using particle-based and mass-spring models,
  • cast primary rays from a camera, and secondary rays from surface reflections and/or refractions to compute the color at a surface point.


Your final grade will be determined as follows:
  • Labs: 40% (about 10 labs in groups)
  • Quizzes: 5% (effort-based, on Canvas)
  • Projects: 50% (15% + 10% + 25%)
  • Participation: 5% (timeliness, attendance)
I will use Canvas to post your grades.

Lectures & Labs

In a typical week, I will introduce a particular topic on Tuesday, which will involve a little bit of lecturing as well as some short exercises. On Thursdays (in class), we will start a lab in which you will get additional practice with the week's topic. You should be able to finish the core component of each lab within the Thursday session (maybe a little longer), but you can submit the labs at the beginning of the following week. In other words, the labs for each week will be due on the Monday of the followiing week at 11:59pm. You must submit labs on time.

You will be working in groups of 2-3 for the labs of a particular week. In order to make team-based development easier, all labs will be developed and submitted through our repl.it team: https://repl.it/team/cs461f21.


Right before class on Tuesday, I will post the lecture notes for that week, so you can follow along with the material. After class on Tuesday, I will post the description for Thursday's lab. Before coming to class on Thursday, you will complete a pre-lab quiz which will contain some short questions about Tuesday's lecture, the notes or some questions about the lab description. These Canvas quizzes are open notes and effort-based (i.e. you get the points if you complete them), but they must be submitted on time to get the effort-based credit.


Labs consist of short programming exercises designed to build up your computer graphics skills as we study each topic. There will also be three projects which combine several topics together. Projects are to be completed independently, but you can of course discuss concepts with your peers. The due date of each project is listed on the course calendar. You must submit your project by the due date. However, Projects 1 & 2 are eligible for a re-submission, up to one week after the initial due date. I will provide feedback on your initial submission directly in your repl (as quickly as possible) so that you can improve your submission. Project 3 must be completed by the listed due date (no resubmission).

Project 1: Visualizing a Mesh (15%)

Project 1 involves practicing with the matrix transformations involved in the graphics pipeline, while also practicing with manipulating some mesh data structures (weeks 1-3). Your primary job will be to render a mesh in 3d using the Canvas API to do all the drawing.

Project 2: Animation (10%)

Project 2 consists of implementing a cloth animation. We will prototype some of the physics involved in animating cloth in class and will use the Canvas API to initially render each frame in the animation. Your primary job for Project 2 will be to take the lab prototype, and use WebGL to render the cloth, thus combining several concepts from weeks 4-9.

Project 3: Ray Tracer (25%)

Project 3 involves developing your own ray tracer. I will provide some starter code (much more minimal than the labs) and some checkpoints for you to make sure your code is roughly working correctly. Then it will be up to you to implement some additional features that you find interesting. Again, I will make recommendations for features you can implement. You will describe your ray tracer implementation and any features you implement (citing sources wherever necessary) in an HTML document, which will be your final report.


Your particpation grade will be determined by your attendance in class, your participation in the discussions and labs, and the timeliness of your lab/project submissions and pre-lab quizzes.


There are no required textbooks. Lecture readings will be posted on the calendar. However, you may find the following textbooks useful:


My goal is to create an inclusive and welcoming learning experience for everyone. I try to use language, examples and exercises that promote a sense of belonging to the field of computer science, but please let me know if there is anything I can do to improve.

Furthermore, creating such an environment is a team effort, so I expect you to join me in fostering an inclusive learning experience for everyone. Every member of the class is expected to show respect for every other member so that everyone can learn in this space. If you experience or witness any behavior that opposes this idea, it would be helpful for me to know so that I can address it. If you feel comfortable, you can report such incidents in the following ways:

  • talk to or email me,
  • report the incident to our anonymous CS departmental climate feedback form,
  • fill out a Bias Incident Report which goes to the Middlebury Community Bias Response Team.
You belong in this class and in the computer science department. Thank you for being here and for contributing to this course.


Academic Accommodations

Students with documented disabilities who believe that they may need accommodations in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. Assistance is available to eligible students through Student Accessibility Services. Please contact the ADA Coordinator Jodi Litchfield, who can be reached at litchfie@middlebury.edu or 802-443-5936 for more information. All discussions will remain confidential.

Title IX

As faculty members and members of the Middlebury community, we are committed to the safety of all students. If we learn of any potential violation of our Policy Against Sexual Misconduct, Domestic and Dating Violence and Misconduct, and Stalking ('SMDVS Policy') or our Anti-Harassment/Discrimination Policy, we are required to notify a member of Middlebury's Title IX team (policies summary). This ensures that the students receives timely care and information about their rights, their choices, and available resources for support. Students who would like to speak with a confidential resource who does not have an obligation to report can contact MiddSafe, the Patron Center for Health and Wellness, WomenSafe (serving individuals of all gender identities), or campus and local clergy and medical professionals. For more information, see go/sexualviolenceinfo.

Honour Code

You are expected to maintain the highest level of academic integrity in this course. All work you turn in should be your own. However, collaboration on labs is not only allowed, but encouraged. When working with another student on your labs, please acknowledge that person at the top of your report (there's a section for you to list all group member names). Projects are to be completed independently and should be entirely your own work.

Laptop Loaner Program

If you ever find yourself temporarily in need of a laptop, the Computer Science department has 10 rotating Dell laptops available to our students. These come pre-installed with software for most of the courses in the major. They are available to be loaned out short-term or long-term based on your need (as determined by you). Feel free to ask me ahead of time if you think you need one for just a class period, or you can send an e-mail to Robert Lichenstein: rlichenstein [at] middlebury.edu directly.

On Long-Term Use: College policy has changed recently to include the expectation that every student have a laptop available. The college provides laptops to those who need them where “need” is based on Student Financial Services calculations. If you anticipate needing a laptop for the whole term, we encourage you to inquire with Student Financial Services and the library first due to our smaller pool of equipment. However, our department commits to meeting the needs of every student, so do not be afraid to reach out if you believe you need one of our laptops for any length of time.