Welcome to CS 1230, the longest-running computer graphics course in the known universe!
Daniel Ritchie (
Zack Cheng (
zcheng12), Logan Dooley (
Adrian Chang (
achang57), Anna Zhao (
azhao26), Derick Toth (
dtoth1), Helen Huang (
hhuang65), Jianxin Gu (
jgu26), Marc Mapeke (
mmapeke), Mehek Jethani (
mjethani), Nick Huang (
yhuan170), Sean Zhan (
xzhan2), Yiwen Chen (
- Course Development-Only TAs:
Angela Xing (
axing2), Geoffrey Hazard (
ghazard), Ziang Liu (
- TA Mailing List:
Lectures are held Tues & Thurs 10:30am - 11:50am, at the Metcalf Auditorium. Recordings will be made available online through Panopto.
Feel free to ask questions on our Ed discussion page (sign-up link)!
Our TAs monitor Ed and answer questions during Ed hours throughout the week; these can be found on the course calendar. Outside of these times, you should not expect a prompt response from a TA. In particular, please note that we do not have Ed hours from 9pm - 9am or on weekends.
However, your fellow students may be monitoring Ed as well, and they can be a great resource. We encourage you to answer each other's questions on Ed; your record of helping out fellow students on Ed is something we factor in when determining final grades for borderline cases.
Our TAs hold regularly-scheduled TA hours, during which you may ask questions about the course and assignments; these can also be found on the course calendar. All TA hours are hybrid—a Zoom link will be posted on hours.cs.brown.edu at the start of the session.
TA hours are often very busy, and many times there will be a waiting list. You may sign up on the waiting list when TA hours are in progress, but not before TA hours start. The TA will clear the waiting list at the start of TA hours each day. If the waiting list is very long and the end of TA hours is approaching, the TA may close the waiting list so that all people on the waiting list can be helped before TA hours are over.
On very rare occasions, we may have to cancel or reschedule a TA hour session due to external circumstances. These will be announced on Ed, and changes will be reflected on the course calendar.
Masks are strongly recommended in all in-person lectures, labs, and office hours.
Feeling sick? Please do not come to lecture or use public computer labs. Ask a friend to fill you in, and review the slides and lectures online. Lectures will be recorded. We'd like to keep everyone in good health.
There are several different listings for this course on Courses @ Brown:
CSCI 1230 S01: The main section of the course. You should sign up for this, unless any of the below circumstances apply to you.
CSCI 1230 S02: This section is for students who really want to take the course, but have an unavoidable time conflict with another course. Since this section is marked as "ONLINE" on C@B, it will not trigger a schedule conflict with any other course. If you need to enroll in this section, you are still welcome (and encouraged!) to come to lecture, conflicts permitting. At minimum, you should watch the lecture recordings soon after they are posted.
CSCI 2230: This course is for graduate students who wish to earn 2000-level credit. Graduate students enrolled in this course attend the same lectures and complete the same assignments as students in CSCI 1230; however, they will be expected to implement some extra features for each assignment. If you are not currently working towards a graduate degree, you cannot enroll in this course.
CSCI 1234: This half-credit course (to be taken in addition to CSCI 1230 S01 or CSCI 1230 S02) is for undergraduates who wish to challenge themselves to complete the same extra requirements as grad students taking CSCI 2230. CSCI 1234 can be taken for a letter grade or S/NC, regardless of the grading option chosen for CSCI 1230. Students who wish to use CSCI 1230 as their capstone are required to take this extra half-credit course for a letter grade.
The only official course prerequisite for CSCI 1230 is to have completed a CS intro sequence, culminating in CSCI 0160, 0180, 0190, or 0200.
Additionally, the following are helpful, but not required:
- Having taken CSCI 0300 and/or CSCI 0330, which use C,
- Having taken CSCI 0320, which covers software design,
- Familiarity with C++ (though most students do fine without any prior C++ experience), and
- Knowledge of basic linear algebra (i.e. vector/matrix multiplication, dot/cross products)
Everything in this course can be done through the department machines, including remotely via FastX.
If you wish to work on your local machine instead, lab 1 will walk you through setting things up. Note that your device must meet these requirements:
- You must be able to access Github, Gradescope, and this website;
- You must also have sufficient free space (about 10 GB; and potentially 30 GB more if you're on MacOS and need to install XCode); and
- Your machine must support OpenGL 3.1 or newer. You'll likely have no problem if:
- Your computer is newer than 2012, and has Intel, AMD, or NVIDIA graphics hardware, or
- Your computer is newer than 2015.
Students who complete this course will:
- Understand how to create and manipulate raster images by:
- Simulating interactive paintbrush/airbrush effects, and
- Applying filters and transformations, minimizing artifacts such as aliasing (aka "jaggies").
- Be able to implement the raytracing rendering algorithm for producing pseudo-realistic imagery, including:
- Describing virtual cameras,
- Applying hierarchies of transformations (translation, rotation, scale) to 3D objects,
- Determining object visibility by casting rays from a camera into a scene, and
- Understanding mathematical models for calculating the amount of light reflected from an object in a scene.
- Be comfortable writing real-time graphics programs using OpenGL, including:
- Representing 3D shapes as triangle meshes,
- Simulating interactive first-person camera movement via transformation matrices,
- Writing shaders in the GLSL shading language for vertex transformation, per-pixel lighting calculation, and
- Utilizing frame buffers to implement full-screen post-processing effects.
The full list of CSCI 1230 topics can be found on the lectures page.
The primary text for this course is the most recent edition of Computer Graphics: Principles and Practice, by John Hughes, Andy van Dam, Morgan McGuire, David Sklar, Jim Foley, Steve Feiner, and Kurt Akeley.
The book is not required, as the lecture slides for CS 1230 are nearly comprehensive. These slides do not replace the textbook, but they are the best source of information that is directly relevant to the assignments.
There are 6 2-week programming projects, divided into three units (raster graphics, raytracing, and realtime graphics). There is also a 2-week final project, which is open-ended and may be completed in groups (all other projects must be done individually).
Projects are graded for functionality and performance.
All 6 (non-final) projects include a written algorithm assignment ("algo") to get you started on thinking about the assignment mathematically and algorithmically. Algo answers should be clear and succinct. If we ask you to describe a section of the project's algorithm, you should probably go with a description, or pseudo code, rather than actual C++.
Algos are graded on effort and completion, with a small amount of extra credit available for getting certain questions correct. "Effort and completion" means making a good-faith attempt to answer each question, with explanations of your reasoning wherever you are unsure of the correct answer. Algorithm solutions are returned the same day as the deadline so you can begin coding with confidence right away. Because we release the solutions immediately after the deadline, late algo submissions are not accepted.
In addition to the projects, a series of 11 weekly labs will provide hands-on experience with various graphics programming topics and tools. Each lab is designed such that the code you write will be helpful for one of the programming projects (or for the final project).
Expected Time Commitment
Over 13 weeks, you will spend 3h per week in class (39h total) and approximately 2h per week per lab (22h total). Each project, algos included, typically takes under 8h per week, though this heavily depends on how much extra credit you choose to implement.
In any case, students should expect to spend 120 hours total on homework by the end of the semester.
Before we can grade any of your assignments, you must complete our collaboration policy agreement. If you do not do so, you cannot pass this course.
Your CSCI 1230 grade consists of 6 rigorously graded projects, 11 labs that are given completion grades, and 1 final project. There are no exams or quizzes.
- Collaboration Policy Agreement (must be completed to pass course)
- Labs: 11% (total; 1% each graded for completion)
- Algos: 6% (total; 1% each graded for completion)
- Projects (excluding algos):
- Project 1: Brush: 8%
- Project 2: Filter: 10%
- Project 3: Intersect: 12%
- Project 4: Illuminate: 13%
- Project 5: Lights, Camera: 12%
- Project 6: Action!: 13%
- Final Project: 15%
Daniel doesn't use a curve and would be delighted to hand out A's to the entire class. In borderline cases, attendance and class participation, as well as your perceived effort and dedication, will be taken into account.
There is ample room for bells, whistles, and other credit-garnering efforts on the part of ambitious programmers. You are invited to get creative, as long as it does not make you late. Rewarding bells and whistles with extra credit is left to the discretion of the course staff, so we strongly encourage you to discuss your creative plans with a TA before you forge ahead to make sure that they are considered appropriate for credit. If you are not enrolled in CSCI 2230 or CSCI 1234, completing any of the enhancements required for those courses will count as extra credit for you.
Sometimes you may feel that you have been graded unfairly. If you ever feel this way, please request a regrade on Gradescope. Once your request is evaluated, you will be provided with an explanation and possibly points back. If you are not satisfied with the regrade decision, please talk to the HTAs. If there is still a problem, Daniel has the final word on grading, and will be happy to hear what you have to say.
If you decide to challenge a grade, you must do so within one week of its receipt. In the past, students have tried to get points back on all of their assignments in the last week of classes; this places an unfair burden on TAs at the end of the semester and is unfair to other students. If you discover that you handed in the wrong work after you get your grade back, or if you fix your program after getting its grade back, we are unable to take those fixes into account for grading purposes.
A late algo or lab checkoff will receive no credit. Each day a project is turned in late will be penalized 10% of the possible total points. (If you are 25 hours late in handing in, that's a 20%, even though you hand in during the first hour of that 'extra day').
Every student has five late days that can each be used to waive a day that a project was turned in late. Filling out our mid-semester course feedback survey also grants you one extra late day. These late days will automatically be applied optimally (to maximize your grade) at the end of the semester. You may not use any late days at all on any part of the final project.
Late days are expected to cover clustering of due dates and job interviews. For sickness and other issues of wellbeing, please obtain a note from health services or a Dean and communicate with Daniel; the TAs will not be involved in handling these.
As projects build upon each other, it is important to start early and quickly recover from late handins.
Diversity and Inclusion
Our intent is that this course provide a welcoming environment for all students. Our TAs have undergone training in diversity and inclusion, and all members of the CS community, including faculty and staff, are expected to treat one another in a professional manner. If you feel you have not been treated in a professional manner by any of the course staff, please contact either Daniel Ritchie (course instructor), Roberto Tamassia (Dept. Chair), Tom Doeppner (Vice Chair) or Laura Dobler (Diversity & Inclusion staff member). We take all complaints about unprofessional behavior seriously. Prof. Krishnamurthi has good notes on this area. To access student support services and resources, and to learn more about diversity and inclusion in CS, please visit this webpage.
Brown welcomes students from all around the country and the world, and their unique perspectives enrich our learning community. To empower students whose first language is not English, an array of support is available on campus, including language and culture workshops and individual appointments. For more information, contact the English Language Learning Specialists at firstname.lastname@example.org.
Brown University is committed to full inclusion of all students. Please inform Daniel if you have a disability or other condition that might require accommodations or modification of any of these course procedures. You may email Daniel, come to office hours, or speak with him after class, and your confidentiality is respected. We will do whatever we can to support accommodations recommended by SEAS. For more information contact Student and Employee Accessibility Services (SEAS) at 401-863-9588 or SEAS@brown.edu. Students in need of short-term academic advice or support can contact one of the deans in the Dean of the College office.
Being a student can be very stressful. If you feel you are under too much pressure or there are psychological issues that are keeping you from performing well at Brown, we encourage you to contact Brown's Counseling and Psychological Services CAPS. They provide confidential counseling and can provide notes supporting extensions on assignments for health reasons.
We expect everyone to complete the course on time. However, we certainly understand that there may be factors beyond your control, such as health problems and family crises, that prevent you from finishing the course on time. If you feel you cannot complete the course on time, please discuss with the instructor the possibility of being given a grade of Incomplete for the course and setting a schedule for completing the course in the upcoming year.
Thanks to Tom Doeppner and Laura Dobler for the text on accommodation, mental health, and incomplete policy.
CS 1230 is a challenging course, both conceptually and practically: there are new ideas to wrap your head around, and the programming work expected of you has a non-trivial learning curve (especially if you've never seen C++ before). Because of this, it is completely normal to struggle on some of the assignments! This section has more information about how to ask for course-related help when you need it.
Before we get started, keep in mind: your TAs are all students, too. They have their own courses and other obligations; being a TA is just one of their many time commitments. TA time is a finite resource, so please be respectful of it. Before asking for TA help, make a good faith effort to solve a problem on your own (or seek help from a friend/classmate, within the boundaries of our collaboration policy). And always remember: getting help from a TA is a privilege, not a right to which you are entitled. "I wasn't seen by a TA" is not a valid reason for handing in work late. At the end of the day, you and you alone are responsible for your performance in the course.
Where To Go To Get Your Questions Answered
Your first stop when you have a question should be the course website. You are responsible for checking the web site frequently, as we will be updating it with important information as the semester progresses. Most major updates to the website (e.g. an assignment release) will be accompanied by an announcement on Ed.
If you can't find the answer to your question on the course website, you should next check Ed. First, check if someone has asked a similar to question to the one you have. If you've confirmed that no one else has asked (a variant of) your question, then you can go ahead and make a new post.
For more involved course-related questions, you can come to TA hours. Note that all TAs are prohibited by department and university policy from answering course-related questions when not on official TA hours, though they may answer general administrative questions. Thank you for helping us comply with departmental and university regulations (which reflect applicable federal and state labor laws). If you have any questions about this policy, please contact email@example.com.
Emailing The Course Staff
If there is a problem that affects the entire class (such as a bug in the support code), you may email the TAs at firstname.lastname@example.org. You may also make a post on Ed.
For administrative questions, or if you are having problems with a TA, you can email the HTAs at email@example.com.
Questions related to programming projects or concepts explained in class should be asked at TA hours or on Ed. We will not respond to such questions via email.
Feedback For Us?
CS 1230 is a continually evolving course, and it underwent significant changes just prior to its Fall 2022 run. As such, there are bound to be bugs or other mistakes hiding in our course material.
If there is something which you do not understand, or which is not stated very clearly, please let us know so we may fix it right away. This applies to lecture materials as well. To do so anonymously, you can use the form linked at the bottom of this page.
The more feedback you give, the better we can make this course for you and for future classes of Brown computer graphics students!