Course Missive

Welcome to CS 1230, the longest-running computer graphics course in the known universe!

Course Staff

  • Professor:
    Daniel Ritchie (dritchi1)
  • HTAs:
    Dylan Hu (dhu24), William Sun (wsun28)
  • UTAs:
    Orion Bloomfield (obloomfi), Jared Cambier (jcambier), Jamie Chen (achen309), Tomas Dougan (tdougan1), Austin Funk (afunk3), Kazen Gallman (kgallman), Helen Huang (hhuang65), Mehek Jethani (mjethani), Stewart Morris (smorri21), Sebastian Park (spark265), Anh Truong (dtruong7), Nick Vadasz (nvadasz), Smriti Vaidyanathan (svaidya4)
  • Course Development-Only TAs:
    Krishi Saripalli (ksaripal)
  • TA Mailing List:

Essential Info


Lectures are held Tues & Thurs 10:30am - 11:50am in List Art Building Room 120. Recordings will be made available online.


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.

TA hours

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

The professor also holds office hours each week; these are also hybrid.

Public Health

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.

It is not possible to "downgrade" from CSCI 2230 to CSCI 1230 after the university's course add/drop deadline. If you plan to take CSCI 2230, please be prepared for the extra time commitment.

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)

Note for graduate students and RISD students: If you have not previously completed coursework roughly equivalent to one of Brown's CS intro sequences, you will struggle in CS 1230. We assume a a rigorous introduction to programming and fundamental computer science principles (e.g. data structures, complexity analysis, recursion). If you have any doubts about whether you have the necessary background, please contact the professor.

Working Locally

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:

  1. You must be able to access Github, Gradescope, and this website;
  2. 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
  3. 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.

Learning Goals

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.



There are 6 2-week individual 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). Unlike projects, labs can be completed collaboratively and are graded on a check-off basis.

Expected Time Commitment

Over 13 weeks, you will spend 3 hours per week in class (39 hours total) and approximately 2 hours per week per lab (22 hours total). Each project, algos included, typically takes under 11 hours per week, though this heavily depends on how much extra credit you choose to implement. In summary:

  • Lecture: 3 hours x 13 weeks = 39 hours
  • Labs: 2 hours x 11 labs = 22 hours
  • Projects: 11 hours x 6 projects = 66 hours
  • Final project: 33 hours
  • Office hours, Edstem: 20 hours

Total: 180 hours


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%

You must complete a final project in order to pass the course.

Daniel uses standard formulae to convert raw percentages into letter grades: >= 90% is an A, >= 80% is a B, and >= 70% is a C. Percentages below 70% are converted to an NC grade. If you are taking the course S/NC, you must earn at least a C to receive an S.

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.

For 2230 and 1234 Students

If you are enrolled in CSCI 2230 or CSCI 1234, you must make a reasonable attempt to implement the required number of extra feature points for each project. Let N denote the number of such extra feature points for a given project. Then:

  • CSCI 2230 students: Your grade for the project will be computed out of (100 + N) points.
  • CSCI 1234 students: Towards your final grade for CSCI 1234, your project grade will be computed out of N points. Towards your final grade for CSCI 1230, your project grade will be computed out of 100 points (as with all other students in CSCI 1230).

Extra Credit

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.

Regrade Requests

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. In fact, any regrade request submitted in the final two weeks of the semester (i.e. the two weeks before final project presentations) will be considered only at the time that final grades are calculated, and only if it could potentially change your final grade.

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.

Late Policy

Algos: A late algo submission will receive no credit.

Labs: If you submit your lab (via Gradescope) before the deadline, you can get it checked off up to one week late for full credit. If you submit your lab after the deadline, you can get it checked off up to one week late for half credit. Beyond one week past the deadline, you receive no credit for a lab.

Projects: 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


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 Students in need of short-term academic advice or support can contact one of the deans in the Dean of the College office.

Mental Health

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.

Incomplete Policy

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.

Getting Help

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 (either in-person or via Zoom). 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

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

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; 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!