Syllabus

Meetings & Materials

Class meetings: 4th period, four times per week: Mondays, Tuesdays, and Fridays, as well as the full 75-minute period on Thursdays. Thursdays will frequently be used as required “lab time” for you to work on homework.

Book: Interactive Computer Graphics: A Top-Down Approach with WebGL, 7th ed. by Angel & Shreiner. ISBN 0133574849.

Course Goals & Content

The goal of this course is for you to learn the fundamental principles of 3D computer graphics. These include practical aspects of linear algebra and 3D geometry, triangle-mesh representations of surfaces in 3D, projection- and raytracing-based rendering, classical techniques of texturing and shading, and hardware-accelerated graphics pipelines.

In order to really grapple with these ideas, throughout the term we will build simple renderers from scratch in Python and GLSL/WebGL. These projects will pull us along through the various topics we'll cover, and we'll spend a fair bit of class time working on the projects.

This class will give you a shallow but broad overview of major topics in 3D computer graphics, leaving out many details, many advanced topics, many technologies, and many fundamentals related to 2D graphics. Successfully completing this course should give you a huge advantage if you choose to take a computer graphics class in college, but it would not by any means replace such a course.

There are no tests or quizzes in this course.

Work Expectations

Computer graphics is a fascinating, rewarding subject with practical connections to many other topics in computation. It involves moderately advanced math, a lot of challenging coding practices, and technologies that are unfamiliar to most students. In many undergraduate CS curricula, Computer Graphics is the most labor-intensive course offered.

I've designed our course to minimize excess coding labor and conceptual barriers, but nevertheless the assignments will require many hours of hard work. This is a 600-level course and the expected workload is correspondingly rather higher than in Comp 500. You will need to start each assignment right away, and work on it consistently, in order to keep the workload manageable. Devoting class time to working on projects is part of the strategy for helping you succeed.

I expect a high degree of self-directed learning in this class. There may be a number of things you’ll have to figure out on your own, with the help of your classmates, or by working with me during conference period.

It’s inevitable that variations in prior experience will affect how much extra work needs to be put in by each individual student. I try to do a good job aiming the course at a level that’s achievable for everyone, but for some people that may involve a pretty tremendous effort, while others can do it fairly readily.

If you are struggling in this class, please come talk to me as soon as possible. I'm always here to support you, and I know everybody comes in with different background. In addition, the schedule for this course is not set in stone, and if many people are struggling, it can be modified to keep it manageable for the majority of students.

Whom (and How) to Ask for Help

If you need help with anything, you can post to Piazza, consult with other students, consult with a teddy bear (really! It works!), search online, or meet with me. Piazza will be the class's main medium of communication outside of class time. Please follow these guidelines:

I try to answer questions promptly on Piazza, though I generally don't answer late in the evening or on weekends.

If you'd like to talk with me in person, I'm available in Morse 103 during conference period each day, as well as my office (Morse 102) during advising period. You are always welcome (and encouraged!) to drop by unannounced in conference period or advising period — no need to check with me in advance.

If you'd like to meet with me outside of conference period, please email me about a day in advance. I'm often free during 3rd, 6th, and 7th period, since I don't teach then.

Attendance

Please ask by email at least 15 minutes (but preferably 15 hours) in advance if you would like to request Personal Time. Requests will generally be approved but I do have the right to decline any request.

Please get to class on time. Three unexcused tardies count as one unexcused absence. If you're wondering about your status in this regard, please ask. Being off-task during class time is distracting and will count as an unexcused tardy.

Grading

Every assignment in the course is worth some number of points; typically, large projects will be worth about 50 points, and small assignments will be worth 5–15 points. All points are equivalent, and your final grade will be computed as the percentage of total points earned out of all points possible. Here's the mapping to the PA grade scale:

PercentageGrade
[93–∞)6
[84–93)5
[76–84)4
[68–76)3
[60–68)2
[45–60)1
[0–45)0

Late work will incur a penalty of 10 percentage points per 24-hour period by which it is late. (For example, a submission half an hour after the due date incurs a 10-percentage-point penalty; a submission 24.5 hours late incurs a 20-percentage-point penalty.)

Unless stated otherwise, everything is due 15 minutes before class time on the due date specified.

Document Authority

There are a variety of sources of information about assignments in this class. They should all agree, but sometimes these systems get out of sync by accident. If you find a discrepancy between two sources of information, please email me immediately (or post to Piazza) and let me know; I'll resolve it right away. Once you've alerted me, you should proceed in the meantime with the most authoritative source of information. Here are a few, listed from most to least authoritative:

Working Together

Learning and coding are both collaborative arts. However, any work you turn in must be your own work (or, in a group assignment, the work of you and your partners together). You are free to consult with any of the resources mentioned above, but you are required to credit any assistance you receive, in writing, in what you turn in. You should be prepared to explain any part of anything you submit, without the assistance of anyone else, even partners. It is your responsibility to make sure that you fully understand the work that you create, alone or in a team.

There are two kinds of working together: Collaboration and Plagiarism. The former is encouraged; the latter is forbidden. But when you're starting out, it can be hard to tell the difference between them. The two essential distinctions have to do with transformation and attribution — the artifact (writing or code) that you submit must be entirely your own work (every last word of it), and if any ideas embodied in your work were provided or inspired by someone or something other than yourself (or your team), you must cite this source.

Plagiarism is the process of (intentionally or unintentionally) presenting the work of someone else in such a way that a reader might assume it was your own. Here are some examples — note that this list is non-exhaustive:

Penalties for plagiarism or cheating include formal disciplinary action, a zero for the relevant assignment, and possibly more significant impacts on your grade for the course.

If you have any uncertainty about a particular instance of working together, make sure to check with me first.