🐄 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.