CS 3451 Syllabus

Course Description

This course is designed to be a first course in computer graphics, and as such, no previous experience in graphics is assumed. The only knowledge that you need coming into this course is basic linear algebra and reasonable programming skills. The course will require you to use a language you may not have seen before (Typescript) and do assignments using web technology and tools.

Course topics include: output devices, line drawing, polygon scan conversion, 2D and 3D transformations, projection, hidden surfaces, color vision, surface reflectance and illumination, texture mapping, shadows, anti-aliasing, hardware graphics pipeline, GPU programming, interactive programming, ray tracing, polyhedral models, polynomial curves and surfaces, subdivision surfaces. A few additional topics will be covered near the end of the course, time permitting.

Required Textbook

  1. Fundamentals of Computer Graphics, Fourth Edition, by Steve Marshner and Peter Shirley.
    Available at the bookstore, or other places like Amazon.
  2. TypeScript Documentation, Version 3.5, free, available online)


Component Grade
Programming assignments: 75% (5% for warm-up project, 70% for remaining projects)
Midterm exam: 10%
Final exam: 15%

Programming Projects

Computer graphics is learned best by programming. Each student will complete four or five medium-sized programming projects, written in an object-oriented superset of Javascript called Typescript. At the instructor’s discretion, some of these five projects may be broken into two separate sub-parts that are due on different days. There will be one additional warm-up project handed out during the first week of class, and each student must do this warm-up project entirely on their own. For all of the other projects, students may talk with one another about any of the concepts required for the programming projects, but each student must perform the actual programming of this assignment on their own. Students must write all of the code for each assignment themselves without any form of code sharing by electronic, written, verbal or any other means. The only code from others that may be used in these assignments are those that are given by the instructor. Note that it is impossible to get a good grade in this course without completing all five programming assignments.

Collaboration and Web Resources

All assignments in this class are individual projects and should represent your work, unless otherwise noted on the assignment.

Asking for help with the various languages (e.g., Typescript, Javascript, etc.), tools (e.g., Visual Studio, node, npm, etc.) and SDKs/APIs (e.g., WebGL, etc.), as well as discussing general strategies and approaches for how to accomplish certain things, is fine on these assignments; as long as the solution you create and turn in is yours. For example, you can get a pointer on how to implement something, but you should then do the implementation yourself.

If in doubt, ask.

Contacting the Instructor and TAs

The instructor and TAs are available via email, Piazza and Discord. However, please do not expect immediate answers on any of these forums, especially nights and weekends. We will check the various forums regularly, especially 9am-4pm M-F, and endeavor as a group to reply promptly. But please remember that each of us has classes, assignments, work and other things that we will also need to focus on, so do not expect immediate replies.

That said, if a message has not been replied to in more than a day (during the week), please feel free to send a “polite reminder” if you are still in need of a reply.

Use of Code You Did Not Write Yourself

We will tell you explicitly what sample code and resources you may use in your assignments. Aside from this, you are expected to implement the “intellectual core” part of each assignment yourself; extra libraries (e.g., 2D web layout libraries like jquery, or audio libraries if you wish to add sounds) can be used if you desire, but they should not solve or simplify a core part of the assignment.

If you find an library or sample code from somewhere that you want to use (such as in a tutorial or web page or on github), you should verify with the instructor and/or TA that it is acceptable before using it, and then document what you got and where.

The goal of the assignments is for YOU to demonstrate that you have learned how to do the relevant work, not for you to piece together other peoples code.

If in doubt, ask.

Attendance and Participation

You are expected to attend class. You are expected to know anything discussed in class. If the instructor clarifies an assignment or discusses anything else during class, you are expected to know it. We will try to update the website as appropriate, but do not guarantee this will happen. If you miss class, check with your classmates to find out what you miss.


You will be required to bring a laptop to class, and the required web development technology installed on it. We will occasionally do in-class programming exercises. Please ensure you have a laptop that supports the necessary technology.

When we are not using them for in-class work, I will ask students to close them. While I am inclined to let people do what they want with their time (and grade their results), I have received complaints from students in the past about how distracting it is to have students browsing the web/facebook/twitter, watching videos, and playing games in class. And here’s a nice article about a study documenting the negative impact on performance of students who are seated near folks using laptops (even if they aren’t).

Please be courteous to your fellow students. To put this another way: I view using social media and unrelated web browsing as equivalent to talking on a phone in class. If you are doing it and bothering me or others around you, I may ask you to leave class for the day.

Late Policy

The grade on a late assignment will drop 5% of the maximum grade for the assignment for each day beyond the due date (e.g., if an assignment is graded out of 10, you will lose 0.5 points per day). A day ends exactly 24 hours after the assignment is due. Assignments will typically be due at 11:59pm the night before the Tuesday/Thursday they are listed on the syllabus (the exact date and time will be shown on the assignment itself).

Assignments can be submitted up to three days late. No late assignments will be accepted four days or later after the date and time that the assignment was due.