Fall 2014


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 also examine the rendering pipeline and algorithms that improve performance including clipping and hidden surface removal and depth buffers. 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
Time: MWF 9:30am–10:20am
Lab A: W 1:15pm–2:45pm - Sci 256
Lab B: W 3:00pm–4:30pm - Sci 256
Text: Interactive Computer Graphics (7e) by Edward Angel (required)
Other Helpful Texts:

Instructor info

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



Sep 01

  Intro to Graphics,
Software Tools
1-1.2.2, 1.3-1.6, 1.6.2-1.10
InClass: Intro
Project 01
Git help

Sep 03


Sep 05


Sep 08

Rendering Pipeline
Shader Intro
InClass: OpenGL
Project 02

Sep 10


Sep 12

Drop/Add ends


Sep 15

  Vector and Matrix operations
2.7, 3.7, 4-4.5, 4.8-4.10
Project 03

Sep 17


Sep 19


Sep 22

  3D Transforms InClass: Frames/Events
Project 04

Sep 24


Sep 26


Sep 29

  projections, LookAt, camera class, perspective

Project 05

Oct 01


Oct 03


Oct 06

  InClass: Normals, Phong lighting
Midterm Project

Oct 08


Oct 10


Oct 13

Fall Break

Oct 15

Oct 17


Oct 20

  Perlin Noise InClass: Noise
Midterm Project

Oct 22


Oct 24


Oct 27

  Particle Systems InClass: Particle Systems

Oct 29


Oct 31


Nov 03

  CUDA Intro, memory/kernels InClass: CUDA Intro

Nov 05


Nov 07

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


Nov 10

  CUDA Synchronization, parallel patterns InClass: CUDA Patterns

Nov 12


Nov 14


Nov 17

  Computational Geometry InClass: Closest point

Nov 19


Nov 21


Nov 24

  Curved surfaces  

Nov 26


Nov 28



Dec 01

  Stencil Buffers InClass: Stenciling

Dec 03


Dec 05


Dec 08


Dec 19

Final Project Due


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

Homework policy

Lab assignments will typically be assigned in lab on Wednesday and will be due before midnight the following Tuesday night. You are strongly encouraged to start early and ask questions early if you get stuck. You will submit you assignments electronically using git distributed version control. You (or you and your partner) are allowed to use up to 3 late days this semester for turning in lab project assignments. However, at most 2 late days can be used on an individual assignment. Late "days" are measured in class periods after the due date. For example, if the original assignment is due on Thursday before midnight, then if you submit it after Thursday before next Monday night it is one day late.

Use late days wisely; once you have used up your late days, I reserve the right to not accept any further late assignments from you, and if I do accept further late assignments from you, you will receive a significant late penalty on them. I strongly recommend that you do not use any late days on the first few assignments.

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, homework solutions (e.g., proofs, analysis, written reports), and exams. Please contact me if you have any questions about what is permissible in this course.

OpenGL docs
QT docs
OpenGL 4.2 Quick Reference Card
GLSL 1.20 specs
Tia's Language Notes
CMake (feedback welcome)

Common C++ Libraries