Professor: Aline Normoyle
Science Center 258
TR 3-5:30 (After class), and by appointment (available Tue, Thu, and Fri)
Class: TR: 1:15 - 2:30, Science Center 105
Lab A: F: 2:15- 3:45, Science Center 256
Lab B: F, 4:00-5:30, Science Center 256
Course Piazza Page for discussion group and supplementary handouts
Optional Texts (all available at the library, some in e-format):
- Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL, 6th Edition
by Angel and Shreiner.
- OpenGL Programming Guide (8e), by Dave Shreiner, Graham Sellers, John Kessenich, Bill Licea-Kane
- Mathematics for 3D Game Programming and Computer Graphics, 3rd Edition, by Eric Lengyel
- Computer Animation: Algorithms and Techniques, 3rd Edition, by Rick Parent
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition) by Scott Meyers, a great intermediate C++ text, for those who know C++ basics already.
Lab, OpenGL and C++ Resources
Tia Newhall's programming, git, and unix resources
Andy Danners's git and cmake resources
Course Overview, Goals, and Expectations:
Some exposure to major concepts in linear algebra (i.e. vector matrix math), curves and surfaces, newtonian physics,
and prgramming has been assumed in the preparation of the course materials. Although we will review the above background,
we will cover these topics quickly.
Course Learning Goals:
- This course will cover algorithms and techniques used in real-time computer animation, such as those found in video games,
education, simulation, and embodied intelligent agents.
- Students will gain a solid technical foundation for developing, animating, and simulating articulated characters as well as a
foundation in simulating passive phenomena.
- Students will gain hands on experience through weekly programming assignments. Students will gain experience programming in C++ as well as with implementing numerical algorithms.
- Through presentations, students will gain experience reflecting on their work and communicating their experiences to others.
- Topics covered include: geometric coordinate systems and transformations; quaternions; parametric curves and surfaces; forward and inverse kinematics; dynamic systems and control; computer simulation; keyframe, motion capture and procedural animation; behavior-based animation and control; facial animation; smart characters and intelligent agents.
Attend class and labs.
The primary introduction to course material is through class lecture.
Additionally, we will do learning exercises during class, which will count
towards your participation grade. Lab will introduce new
content as well as be an opportunity to make progress on assignments.
- Participate actively.
Students are encouraged to take hand written notes in class. They will also be asked to
submit answers to in-class questions after lecture. Studies
show active involvement is the number one determinant of student success.
- Additional readings
This class does not have an assigned text, but suggested readings will accompany
each lecture. Skimming reading material before lecture can greatly help understanding the
See Tia Newhall's Tips for Reading CS Textbooks
Complete all assignments.
Working on assignments will ground the most important material with concrete examples.
Have a growth mindset.
Computer graphics is a deep topic that requires practice and experience. If a topic is difficult to understand at first, take a step back and ask yourself:
what information would I need to understand this topic better? Which aspects do I understand well?
Which others don't make sense? Do I understand all the terminology? Do not feel embarrassed about asking questions.
Support each other's learning.
People learn best when they are in an environment where they feel secure asking questions. To foster such an environment, we will hold each other to the following social rules in class, labs, and presentations: no 'well-actuallys' (needless clarifications); no
feigning surprise (don't act surprised if someone doesn't know random-fact-X, see below); no -isms (everyone has biases.
The secret to overcoming them is being aware of them);
and no backseat driving (don't give half-baked, unsolicited advice).
This is a tentative schedule. It will be updated as we go.
Grades will be weighted as follows:
- 45% Lab and Homework assignments
- 15% Class participation, attendance, reading quizzes
- 20% Midterm (in lab)
- 20% Final
We will follow the terms and conditions of other CS courses at
Swarthmore. Regarding exams, only conflicts for which you have no control,
such as your participation in an athletic team competition or
an orchestra performance will be accommodated (practices and rehearsals
are not acceptable conflicts).
Please read the Accommodations
section if you need extra time for taking exams.
You must inform me of accommodations or conflicts at least 3
weeks prior to the exam.
The class participation grade is based on:
- lab and class attendance
- participation in in-class and in-lab activities, esp. presentations and in-lecture questions
Several of the labs will be done with a parter.
The programming labs will consist of implementing functions in C++ codebase.
If it has been awhile since you've programmed in C++, please look at Tia Newhall's
C++ programming references
We will review C++ concepts in the zero'th assignment and first lab.
Assignments will be assigned each Thursday and due the following week.
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.
About the CS Lab:
I encourage you to work in one of the CS labs when possible (vs.
remotely logging in), particularly when working with a partner.
The CS labs (Sci Center 240, 256, 238, and Clothier basement)
are open 24 hours a day, 7 days a week
for you to use for CS course work. With the exception of during times when
a class, or a class lab or ninja session is scheduled in a lab, you
may work in one of the CS labs on your CS course work anytime. The overflow
lab (238) is always available. The CS lab resources are for CS course
work. Please review the CS Lab Rules and CS User Rules about appropriate use of CS labs.
Accessing the CS labs after hours:
use your OneCard to gain access to the computer labs and Science Center (near Cornell library) at nights and on the weekends. Contact public safety if you
are not able to access these spaces with your OneCard.
Late Lab Work Policy
To help with cases of minor illnesses, athletic conflicts, or other short-term
time limitations, all students start the course with three
"late assignment days"
to be used at your discretion, with no questions asked. To use your extra time, you must email your professor 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. The professor 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.
You may only use up to 2 late days on any individual assignment.
that you save one of your late days for the B+Tree lab.
After you have used up your late days, I reserve the right to refuse any
late work from you (you will receive a zero). Any work I do accept
after this, will incur a significantly large penalty for every day it is late.
Absence/Assignment Extension Policy
Your three late days for lab assignments are intended to help when you need to miss
a class due to a minor illness or to travel for a conference or interview,
or when you have a lot of work to do in another class.
Extensions are not granted for any of these reasons;
Use your late days
if you feel that you need an extension on an assignment or that you are
unable to attend class for two or more meetings due to a medical condition
(e.g., extended illness,
concussion, hospitalization) or family emergency,
you must provide your instructors with official documentation from the
dean's office or student health center. Their documentation will help us
to provide the appropriate accommodations.
The CS Department Integrity Policy Statement:
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."
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.
For this course, it is fine to help each other with using
utilities and tools (Unix, C++, Sqlite, man, git, make, ...), and with
reading and understanding the assignments.
However, you should avoid discussing the details of your solution with
anyone other than your lab partner, and you should never look at
anyone else's code for a solution to a lab (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, should you post questions to on-line
forums 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.
If you believe that you need accommodations for a disability, please
contact Leslie Hempling in the Office of Student Disability Services
(Parrish 113) or email firstname.lastname@example.org to arrange an
appointment to discuss your needs.
As appropriate, she will issue students with documented disabilities a
formal Accommodations Letter. Since accommodations require early
planning and are not retroactive, please contact her as soon as possible.
For details about the accommodations process, visit
Student Disability Service Website
You are also welcome to contact me privately to discuss your academic needs.
However, all disability-related accommodations must be arranged through
the Office of Student Disability Services.