Fall 2016



Welcome to CS40: Computer Graphics. This course focuses on the creation and manipulation of 3D geometric models and the rendering of these models on a two dimensional screen. We will examine modeling from both a pixel-based view and a more geometric vector-based approach. Core topics include geometric primitives, 2D and 3D matrix transformations, projective geometry, and object modelling. We'll examine the traditional rendering pipeline and will explore advanced techniques for scene manipulation using programmable shaders. Intermediate topics include texture mapping, lighting, and shadows. We will be using the modern OpenGL programming approach which uses programmable vertex and fragment shaders throughout the course. Advanced topics may including grammar based models, isosurface extraction, and GPGPU computing using CUDA.

Class info

Room: Science Center 256
Section 1: MWF 9:30am–10:20am - Sci 240
Section 2: MWF 10:30am–11:20am - Sci 240
Lab A: R 1:05pm–2:35pm - Sci 240
Lab B: R 2:45pm–4:15pm - Sci 240
Text: No required text Other Helpful Texts:

Instructor info

Professor: Andrew Danner
Office: Science Center 247
Phone: (610) 328-8665
Office hours: by appointment



Aug 29

  Intro to Graphics,
Software Tools
InClass: Intro
Project 01
Git setup

Aug 31


Sep 02


Sep 05

Rendering Pipeline
Shader Intro
InClass: OpenGL
Project 02

Sep 07


Sep 09

Drop/Add ends


Sep 12

  Vector and Matrix operations
Project 03

Sep 14


Sep 16


Sep 19

  3D Transforms InClass: 3D Modeling
Project 04

Sep 21


Sep 23


Sep 26

  projections, LookAt, camera class, perspective
InClass: Perspective LookAt
Project 05

Sep 28


Sep 30


Oct 03

  InClass: Normals, Phong lighting
Midterm Project

Oct 05


Oct 07


Oct 10

Fall Break

Oct 12

Oct 14


Oct 17

  Particle Systems InClass: Particle Systems
Midterm Project

Oct 19


Oct 21


Oct 24

  CUDA Intro, memory/kernels InClass: CUDA Intro

Oct 26


Oct 28



Oct 31

  CUDA Synchronization, parallel patterns InClass: CUDA Patterns

Nov 02


Nov 04

Last day to declare CR/NC
or withdraw with a "W"


Nov 07

  Perlin Noise InClass: Noise

Nov 09


Nov 11



Nov 14


Nov 16


Nov 18


Nov 21

  Computational Geometry InClass: Closest point

Nov 23


Nov 25



Nov 28

  Geometry Shaders InClass: Geometry Shaders

Nov 30


Dec 02



Dec 05


Dec 09

9am-Noon Demo Session I


Dec 16

9am-Noon Demo Session II


Grades will be weighted as follows:
40% Lab assignments
15% Quizzes
15% Midterm Project
25% Final Project
05% Class participation

Homework policy

Lab assignments will typically be assigned in lab on Thursday and will be due before midnight the following Wednesday night. You are strongly encouraged to start early and ask questions early if you get stuck. You must submit your assignments electronically by pushing to your assigned git repository. You may push your assignment multiple times, and a history of previous submissions will be saved. You are encouraged to push your work regularly. To help with cases of minor illnesses, athletic conflicts, or other short-term time limitations, all students start the course with two "late assignment days" to be used at your discretion, with no questions asked. To use your extra time, you must email me after you have completed the lab and pushed to your repository. You do not need to inform anyone ahead of time. When you use late time, you should still expect to work on the newly-released lab during the following lab section meeting. I will always prioritize answering questions related to the current lab assignment. Your late days will be counted at the granularity of full days and will be tracked on a per-student (NOT per-partnership) basis. That is, if you turn in an assignment five minutes after the deadline, it counts as using one day. For partnered labs, using a late day counts towards the late days for each partner. In the rare cases in which only one partner has unused late days, that partner's late days may be used, barring a consistent pattern of abuse.

Academic Accommodations

Academic accommodations are available for students with disabilities who are registered with Student Disability Services in the Dean's office.

If you believe that you need accommodations for a disability, please contact Leslie Hempling in the Office of Student Disability Services (Parrish 130) or email lhempli1@swarthmore.edu to arrange an appointment to discuss your needs. Leslie Hempling is responsible for reviewing and approving disability-related accommodation requests. As appropriate, she will issue students with documented disabilities an Accommodation Authorization Letter. Since accommodations require early planning and are not retroactive, please contact her as soon as possible. You are also welcome to contact me privately to discuss your academic needs. However, all disability-related accommodations must be arranged through Leslie Hempling in the Office of Student Disability Services.

Academic Integrity

Academic honesty is required in all your work. Under no circumstances may you hand in work done with (or by) someone else under your own name. Your code should never be shared with anyone; you may not examine or use code belonging to someone else, nor may you let anyone else look at or make a copy of your code. This includes, but is not limited to, obtaining solutions from students who previously took the course or code that can be found online. You may not share solutions after the due date of the assignment.

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 must be your own with the following permissible exceptions: code distributed in class, code found in the course text book, and code worked on with an assigned partner. 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.

Failure to abide by these rules constitutes academic dishonesty and will lead to a hearing of the College Judiciary Committee. According to the Faculty Handbook: "Because plagiarism is considered to be so serious a transgression, it is the opinion of the faculty that for the first offense, failure in the course and, as appropriate, suspension for a semester or deprivation of the degree in that year is suitable; for a second offense, the penalty should normally be expulsion."

For this course, it is fine to help each other with using git, cmake, and general QT/OpenGL tools. Help with reading and understanding the assignments is also permissible. However, you should avoid discussing the details of your solution with anyone other than your project partner, and you should never look at anyone else's code for a solution to a project (or to a similar project). In addition, there are many useful on-line resources of which you should take advantage. However, make sure that you do not use these resources in such a way that it violates the spirit of our Academic Integrity statement. For example, you should not search the web for source code solutions to similar lab problems (I don't know if any exist, but it is possible), nor should you post questions to news groups or mailing lists seeking a solution to the specific problem you are asked to solve. Basically, the solution and code that you submit as your own should be your own. If you are unclear about what type of collaboration is okay and what type is not, ask me about your situation before proceeding.

The spirit of this policy applies to all course work, including code, written reports, and quizzes. Please contact me if you have any questions about what is permissible in this course.

Local Links

git help
git merge conflicts
Understanding git status OpenGL 3.2 tutorial - most of this also works for OpenGL 4.x OpenGL docs
QT docs
OpenGL 4.2 Quick Reference Card
GLSL 1.20 specs
Tia's Language Notes
CMake (feedback welcome)

Common C++ Libraries