Fall 2016

Announcements

Introduction

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

Schedule

WEEK   DATE   ANNOUNCEMENTS TOPIC & READING LAB
1

Aug 29

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

Aug 31

 

Sep 02

 
2

Sep 05

  OpenGL
Rendering Pipeline
Shader Intro
InClass: OpenGL
Project 02

Sep 07

 

Sep 09

Drop/Add ends

3

Sep 12

  Vector and Matrix operations
Project 03

Sep 14

 

Sep 16

 
4

Sep 19

  3D Transforms InClass: 3D Modeling
Project 04

Sep 21

 

Sep 23

 
5

Sep 26

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

Sep 28

 

Sep 30

 
6

Oct 03

  InClass: Normals, Phong lighting
Midterm Project

Oct 05

 

Oct 07

 
 

Oct 10

Fall Break

Oct 12

Oct 14

7

Oct 17

  Particle Systems InClass: Particle Systems
Midterm Project

Oct 19

 

Oct 21

 
8

Oct 24

  CUDA Intro, memory/kernels InClass: CUDA Intro

Oct 26

 

Oct 28

Quiz1

9

Oct 31

  CUDA Synchronization, parallel patterns InClass: CUDA Patterns

Nov 02

 

Nov 04

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

10

Nov 07

  Perlin Noise InClass: Noise

Nov 09

 

Nov 11

Quiz2

11

Nov 14

 

Nov 16

 

Nov 18

 
12

Nov 21

  Computational Geometry InClass: Closest point

Nov 23

 

Nov 25

Thanksgiving

13

Nov 28

  Geometry Shaders InClass: Geometry Shaders

Nov 30

 

Dec 02

Quiz3

14

Dec 05

  Wrap-up  

Dec 09

9am-Noon Demo Session I

 

Dec 16

9am-Noon Demo Session II

Grading

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