🐄 csci-371 computer graphics 🐌 (fall 2022)
james bern
LEC mon 2:35 - 3:50 pm @ Wach 114
thu
LAB tue 1:00 - 2:30 pm @ Bio 301
2:30 - 4:00 pm
OH mon 1:15 - 2:00 pm @ Chem 306
thu 1:15 - 2:00 pm @ Chem 306
sun 5:00 - 7:00 pm @ Bio 301
Wach = Wachenheim; Bio = Thompson Biology; Chem = Thompson Chemistry
each homework, exam, and project deliverable is due the first monday after it is released at 8 pm on glow; please contact me as soon as possible if you cannot meet a deadline.
note: you may submit hw4 by thu, oct 13 (reading period on monday)
codebase & Github Issues
cow and snail documentation
practice final exam questions (coming soon)
tentative calendar
I. FUNdaMENTALs
wk0 introduction
thu, sep 8
lec0 🎥 hw0 sol0
wk1 code fundamentals
mon, sep 12
lec1a 🎥 hw1 sol1
thu, sep 15
lec1b 🎥
wk2 code and math fundamentals
mon, sep 19
lec2a 🎥 hw2
thu, sep 22
lec2b 🎥
II. create a world
wk3 meshes and transforms
mon, sep 26
lec3a 🎥 hw3
thu, sep 29
lec3b 🎥
wk4 advanced transforms and cameras
mon, oct 3
lec4a 🎥 hw4
thu, oct 6
lec4b 🎥
wk5 texture, widgets and imgui
mon, oct 10 xxxx
thu, oct 13
lec5 exam5
III. render a world
wk6 texture and rasterization
mon, oct 24
lec6a 🎥 hw6
thu, oct 27
lec6b 🎥
wk7 OpenGL and shaders
mon, oct 31
lec7a 🎥 hw7
thu, nov 3
lec7b 🎥
wk8 ray tracing
mon, oct 17
lec8a 🎥 hw8
thu, oct 20
lec8b 🎥
IV. control a world
wk9 animation I
mon, nov 7
lec9a 🎥 hw9
thu, nov 10
lec9b 🎥 (audio only; forgot to share screen)
wk10 animation II
mon, nov 14
lec10a 🎥 hw10
thu, nov 17
lec10b 🎥
V. history and applications
wk11 WCMA visit and intro to final project
mon, nov 21
lec11 proj11
thu, nov 24 xxxxx
wk12 retro video games and robotics
mon, nov 28
lec12a proj12
thu, dec 1
lec12b
wk13 fabrication and final presentations
mon, dec 5
lec13a proj13
thu, dec 8
lec13b final presentations
tentative syllabus
Overview: This is an introductory computer graphics course with a special emphasis on hands-on learning. We will write challenging* implementations from the ground up.
*This course will meet you where you are. You are not expected to already know math or programming beyond the prereqs.
Our high-level trajectory is
I. Fundamentals of code and math.
II. Learn how to create a virtual world.
III. Learn how to render a virtual world.
IV. Learn how to control a virtual world.
V. Break of the computer screen and into the real world.
Learning Outcomes: This course is designed to help you become confident coding larger, more complicated computer programs. We will implement and experiment with fundamental techniques required to create, render, and control virtual worlds.
Grading: The final semester grade is broken down as
+ (9 - 1) * 7.5% = 60% Homework,
+ 2 * 10% = 20% Exams,
+ 20% Final Project,
Your lowest scoring homework is automatically dropped. Final semester grades may be curved, but only up (the curve cannot make your final letter grade worse than it would be on a 90-100% = A, 80-89% = B, ... scale).
Collaboration Policies
-
Homework &
Final Project: You are encouraged to collaborate on homework and the final project, including discussing solution strategies, posting questions and answers on the course github, checking final answers, and helping each other debug. However, you must follow the spirit of the
50 ft rule. All math and code you submit must be your own. Please contact me as soon as possible if you cannot meet a deadline.
-
Exams: You may not collaborate on the exams.
External Resources Policies
-
Homework: You may google and look at Stack Overflow to your heart's content. However, you may not copy and paste code from the internet.
All math and code you submit for homework must be your own*.
*The files I give you (cow.cpp and snail.cpp) are considered internal resources. You may use them as if you had written them yourself. Additionally, I may release videos of myself coding to help you get started with a homework. These are also considered internal resources. You are welcome to code along with me and treat the code you write as if you had written it yourself. You may not look at the solution to this week's homework until after you submit. (This rule is only relevant to you if you are submitting an assignment after the deadline.)
-
Final Project: You may copy and paste code from the internet so long as you 1) discuss it with me first and 2) cite your sources.
-
Exams: You may _not_ use external resources on the exams. This includes, but is not limited to, textbooks (including learnopengl.com and others linked on this webpage), Stack Overflow, Wikipedia, and Google. You may, however, use any internal resources (your own personal handwritten or typed notes; your own personal code; and anything hosted on the course website, github, or glow, including homework assignments, homework solutions, lecture slides, videos of me lecturing, and videos of me coding.)
You may _not_ use your friends' notes or code on the exams. You may _not_ use screenshots of textbooks or websites on the exam. While it is technically allowed to use notes made by transcribing textbooks or websites, I will do my best to write exams that do not reward this practice. Please ask me if there is any ambiguity.
Lectures: Lectures will give you the background and tools to succeed on the homework. Lectures may also cover more advanced techniques that are not on the homework*, however the emphasis of lecture will be on techniques we will implement ourselves.
*These topics can be great candidates for a Final Project special method!
Labs: Lab sections are a chance to collaborate with your classmates and receive help from me on homework. No need to code in a vacuum!
Homework: Homeworks are your biggest chance to learn by doing. Your lowest scoring homework is automatically dropped. Homeworks may have extra credit problems.
Exams: The exams will test graphics theory and programming covered by the homework. The first exam will be on the first half of the course. The second exam will primarily be on the second half of the course, but may build upon first half material as necessary. Exams are planned to be timed take-home exams. I aim to allot enough time for you to answer all questions, provided you know the material before the exam starts. You are unlikely to have enough time to learn new material during the exams.
Final Project: The final project is your chance to 1) synthesize the techniques from this course in a creative way, and 2) dive deeper into a method of particular interest. The tentative spec for the final project will be available
here, though is subject to change until it formally released.
*You are not expected to start the final project before it is formally released.
Textbooks: We do not have an official textbook for this course. However, the following resources may be useful, especially for your final project. You may _not_ use these resources on exams.
-
Learn OpenGL (free!)
-
OGLdev (free!)
-
the Graphics Codex (free!)
-
Fundamentals of Computer Graphics (I have a hard copy for use during lab.)
-
Real-Time Rendering (I have a hard copy for use during lab.)
Inclusivity: Williams College values an inclusive environment, and so do I. In this class, we welcome anyone regardless of age, background, beliefs, ethnicity, gender, gender identity, gender expression, national origin, religious affiliation, sexual orientation, and other visible and non visible categories. I am available to address any questions or concerns in person or over email.
Health/Accessibility Resources: Students with disabilities or disabling conditions who experience barriers in this course are encouraged to contact me to discuss options for access and full course participation. The Office of Accessible Education is also available to facilitate the removal of barriers and to ensure access and reasonable accommodations. Students with documented disabilities or disabling conditions of any kind who may need accommodations for this course or who have questions about appropriate resources are encouraged to contact the Office of Accessible Education at
oaestaff@williams.edu.