Course Info


Welcome to CS312. An introduction to computer graphics. Computer graphics is a fundamental technology underlying many applications such as digital photography, film, video games, simulation, training, product design, architecture, and fabrication.

In this class, we will study the fundamental algorithms and data structures used to generate images on a digital display. Students will learn multiple approaches for representing 3-dimensional objects and simulating lights and materials.

Students will additionally gain experience programming with C++ and using git for source control. Students will also practice deriving the mathematical models that underlie common graphics algorithms. These skills will empower students to create their original digital artworks as part of assignments and the final project.

Computer graphics is a multi-disciplinary subject, combining knowledge about hardware, design, physics, and linear algebra. Computer graphics can be a daunting subject because it draws on diverse knowledge and skills. But it also offers many opportunities and ways to succeed! You can focus on aesthetics, user experience, hardware performance, mathematics, or software algorithms. Not to mention how satisfying it is to see digitally bring your own ideas to life and be able to share them with others!

Course Preview

Below are examples from class demos and assignments.

Image filters. Learning goals include image-based filtering techniques.


Mesh viewer. Learning goals include meshes and phong shading.


Fire. Learning goals include particle systems, billboards, and glow rendering techniques.


Path tracing. Learning goals include intersection testing, ray casting, and materials.


Meeting Times

Activity Location Time


Zoom (See Slack for link)

Monday, Thursday, 1:10-2:30pm


Zoom (see Slack for link)

Thursday, 2:40-3:30pm

Office Hours

By Appointment

Sign-up on

Texts and software


Some lecture material will be based on information from the following textbooks:

Real-Time Rendering, Fourth Edition 4th Edition, by Tomas Akenine-Mo¨ller, Eric Haines, Naty Hoffman (available as an e-book at the library)

Fundamentals of Computer Graphics 4th Edition, by Steve Marschner, Peter Shirley



The Bryn Mawr labs have the following software setup. Students may use the computers in Park 230 (Windows/Linux) and 231 (macOS).

  • Github Account Please go to and register. You will be using github to submit assignments.

  • Slack Please go to Our workspace is BrynMawr-CS312-S21. You can ask questions and request one-on-one help over zoom using this course’s slack channel.

  • C++ development environment Please follow the instructions at cplusplus-beginners

  • Graphics development environment Please follow the instructions at getting-started

  • Blender (Optional) Please go to Blender is an open-source 3D modeling tool and advanced renderer. We will occasionally use blender to inspect and edit models and materials.

  • Gimp (Optional) Please go to Gimp is an open-source image manipulation tol, similar to Photoshop. Photoshop is also fine to use if you are familiar with it. We will occasionally use this program to edit images and generate textures.


The syllabus may change during the semester. Please check here every week for updates on lecture content, worksheets, and assignments.

Week Date Topics & ToDo


Feb 15,18

3D Graphics Fundamentals, C++/CMake/Git


Feb 22,25

Raster graphics, more C++


March 1,4

2D Drawing


March 8,11



March 15,18


  • Topics: Cross product, dot product, intersection testing, Normals, Shading/Materials (Lambert)

  • Read: Ray Tracing in one weekend: Sec 6-10

  • (Optional) Real-time Rendering, Section 22.6 (Ray/Sphere Intersection)

  • (Optional) Real-time Rendering, Section 22.7 (Ray/Box Intersection)

  • (Optional) Real-time Rendering, Section 22.8 (Ray/Triangle Intersection)

  • Lecture 3/15/2021, , Lecture 3/18/2021


March 22,25



March 29, April 1

Spring Pause

  • No lab/class this week


April 5,8

Real-time rendering with openGL


April 12,15



April 19,22

Particle systems


April 26,29

Graphics Pipeline: Redux


May 3,6

Procedural modeling


May 10,13

Ray marching

Grading Policies

All graded work will receive a grade, 4.0, 3.7, 3.3, 3.0, 2.7, 2.3, 2.0, 1.7, 1.3, 1.0, or 0.0. At the end of the semester, final grades will be calculated as a weighted average of all grades according to the following weights:


Final Project




Math jams and math presentations

Late Policy

The purpose of assignments, labs, and projects is to give you hands on experience with the topics from class. The weekly time commitment for this course is aimed to be 10 hours per week (includes lecture/lab time).

In general, no late work will be accepted*. The goal of this policy is to prevent you from falling behind in the material. It is better to submit partial work than none at all. However, we realize that you may not be able to complete a deadline for any number of valid reasons. If you know of a conflict in advance by more than one week, you may arrange (over email) for a maximum 2 day extension. For example, if you must travel on a potential due date, have an interview, or an exam that conflicts with the due date, you may ask for an extension with enough advanced notice.

If you need to miss a lab, you can submit your work electronically by midnight on the day the exercises are assigned. Email the instructor with a photo of your work.

Your lowest assignment grade will dropped. Thus, you may also miss an assignment without penalty for any reason.

Academic Integrity

At Bryn Mawr, we assume students are trustworthy and work with honesty and integrity. Look here for information about Bryn Mawr’s Honor Code.

As you progress in this course, you will see that programming is a creative process, similar to writing. The same problem can be solved in multiple ways. It’s essential that you develop your own skills for developing algorithms and implementing them through programs.

Discussing ideas and approaches to problems with others on a general level is fine (in fact, we encourage you to discuss general strategies with each other), but you should never read anyone else’s code or let anyone else read your code. All code you submit should be your own with the following permissible exceptions: code distributed in class, and code found in the course text book. In these cases, you should always include detailed comments that indicates on which parts of the assignment you received help, and what your sources were.

  • Please don’t hesitate to ask the awesome teaching assistants (TAs) for help. They provide TA hours most week nights and are excellent mentors!

  • Please discuss the readings and associated topics with each other. Work together to understand the material. Reading groups to discuss the material are highly recommended — we will explore many ideas and it helps to have multiple people working together to understand them.

  • It is fine to discuss the topics covered in the homeworks, to discuss approaches to problems, and to sketch out general solutions. However, you MUST write up the homework answers, solutions, and programs individually without sharing specific details, mathematical results, program code, etc.

  • Under NO circumstances should you share computer code with another student. Similarly, you are not permitted to use code found on the internet for any of your assignments.

  • Exams, of course, must be your own individual work.

Academic Accommodations

All classes will be recorded and close-captioned. Links to lectures will be posted on the class syllabus.

Any student who has a disability-related need to record this class first must speak with the Director of Access Services, Deb Alder, as part of university policy. Class members need to be aware that this class may be recorded.

To receive an accommodation for a course activity (such as more time on quizzes and exams), you must have an Accommodation Letter from the Office of Student Disability Services and you need to contact us to work out the details of your accommodation at least two weeks prior to the activity. Forms can be emailed to me, the instructor.

You are also welcome to contact us privately to discuss your academic needs. However, all disability-related accommodations must be arranged, in advance, through Student Disability Services.

Students needing academic accommodations for a disability must first register with Access Services. Students can call 610-526-7516 to make an appointment with the Director of Access Services, Deb Alder, or email her at to begin this confidential process. Once registered, students should schedule an appointment with the professor as early in the semester as possible to share the verification form and make appropriate arrangements. Please note that accommodations are not retroactive and require advance notice to implement. More information can be obtained at the Access Services website. (

Links that are related to the course may be posted here. If you have suggestions for links, let us know.