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.
WEEK | DATE | ANNOUNCEMENTS | TOPIC & READING | LAB |
1 | 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 | ||||
2 | Sep 08 | OpenGL Rendering Pipeline Shader Intro | InClass: OpenGL Project 02 | |
Sep 10 | ||||
Sep 12 | Drop/Add ends | |||
3 | Sep 15 | Vector and Matrix operations 2.7, 3.7, 4-4.5, 4.8-4.10 | Project 03 | |
Sep 17 | ||||
Sep 19 | ||||
4 | Sep 22 | 3D Transforms | InClass: Frames/Events Project 04 | |
Sep 24 | ||||
Sep 26 | ||||
5 | Sep 29 | projections, LookAt, camera class, perspective | Project 05 | |
Oct 01 | ||||
Oct 03 | ||||
6 | Oct 06 | InClass: Normals, Phong lighting | Midterm Project | |
Oct 08 | ||||
Oct 10 | ||||
Oct 13 | Fall Break | |||
Oct 15 | ||||
Oct 17 | ||||
7 | Oct 20 | Perlin Noise | InClass: Noise Midterm Project | |
Oct 22 | ||||
Oct 24 | ||||
8 | Oct 27 | Particle Systems | InClass: Particle Systems | |
Oct 29 | ||||
Oct 31 | ||||
9 | Nov 03 | CUDA Intro, memory/kernels | InClass: CUDA Intro | |
Nov 05 | ||||
Nov 07 | Last day to declare CR/NC | |||
10 | Nov 10 | CUDA Synchronization, parallel patterns | InClass: CUDA Patterns | |
Nov 12 | ||||
Nov 14 | ||||
11 | Nov 17 | Computational Geometry | InClass: Closest point | |
Nov 19 | ||||
Nov 21 | ||||
12 | Nov 24 | Curved surfaces | | |
Nov 26 | ||||
Nov 28 | Thanksgiving | |||
13 | Dec 01 | Stencil Buffers | InClass: Stenciling | |
Dec 03 | ||||
Dec 05 | ||||
14 | Dec 08 | |||
Dec 19 |
40% Lab assignments |
25% Midterm Project |
30% Final Project |
05% Class participation |
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.
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 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.