Administrative Details and Information


Ravi Ramamoorthi

4118 EBU3B (CS Bldg)

Office Hours: Tu 12-1pm, Th 11-12am (after class) in 4118 EBU3B or e-mail for appointment other times.


Zexiang Xu

4127 EBU3B

Office Hours: M 10-11am, Tu 3-4pm

Sections: W 4-5pm, W 5-6pm York 4050A

Sai Bi

4127 EBU3B

Office Hours: M 1-2pm, W 1-2pm

Sections: W 6-7pm, 7-8pm York 4050A

Matteo Mannino

4127 EBU3B

Office Hours: Th 1-2pm, Fr 2-3pm

Sections: W 5-6pm, 6-7pm HSS 2152

Graders: Hoang Tran, Anish Shandilya

(with Matteo HW0,1; Zex. HW2; Sai HW3; Sai/Zex HW4) ,

Office Hours: See Piazza

Sections: None


We are using Piazza as the primary method of communication. Please sign up for the UCSD winter cse 167 class. The following link may work.

Please see the Course Schedule for a detailed syllabus and lecture slides.

Any administrative questions or questions not related to class material can be directed at

Parts of this course have been run for the past 4+ years as a massive open online course (MOOC) at edX as CSE 167x, and earlier as UC Berkeley's CS 184.1x. To give you access to the resources developed for the MOOC, we are introducing several experimental features. First, considerable course material including automatic feedback systems are available at edX Edge. We will be running most assignments through edX edge, with automatic feedback systems, so you will need to register for an account and sign up for the course there. Please consult the Assignments page for more details. Second, we are making online lectures for parts of the course available (also available on the edX site; these were originally made in summer 2012 for CS 184 at Berkeley).

Please note however, that we have somewhat upgraded the course material in this offering to introduce modern OpenGL, and there may therefore be some discrepancies between the course material and the earlier online lectures for the OpenGL unit. Moreover, grading in the course will be finalized by the local tutor/grader, who will rely on and require the edX edge feedback systems as a guide but reserves the right to test additional cases and revise scores in the interest of fairness. As such, the online resources are provided as a very useful supplement to the in-person lectures (but they are optional, apart from the compulsory use of the edX edge feedback systems), and the policies and course material of the in-class offering always take precedence.

If you are interested in graphics research at UC San Diego more information can be found here.

We encourage you to make use of the Piazza newsgroup. Feel free to send the TAs or instructor an email, or attend office hours if Piazza doesn't solve your problem, or if you would like to discuss course material. Please note that Piazza will generally have the fastest response time, and your question is likely to be of interest to others.

Times and Locations

We will announce a procedure to assign students to a particular section.

CSE 167: Computer Graphics

This course is an introduction to the foundations of 3-dimensional computer graphics. Topics covered include 2D and 3D transformations, interactive 3D graphics programming with OpenGL, shading and lighting models, geometric modeling using Bézier and B-Spline curves, computer graphics rendering including ray tracing, texture mapping, and basic animation. There will be an emphasis on both the mathematical and geometric aspects of graphics, as well as the ability to write complete 3D graphics programs. This year, we are offering CSE 167 twice (Prof. Schulze taught it in the fall, with slightly different content).

This will be a hopefully fun course, but will require considerable implementation and understanding. This is especially so, since the required programming for some of the assignments is difficult, and since graphics programming in general, and especially coding in OpenGL and GLSL is a new skill. Debugging and working with graphical programs requires substantial work, which is difficult to replace by teaching it theoretically. The main advice is to START EARLY on all of the programming assignments and ask the instructor or teaching assistants if you run into any difficulties; we are always ready to help. If an assignment provides 2 or 3 weeks to do it, it usually means you need (part of) all 2 or 3 weeks, and cannot start a few days before the deadline. Most students should successfully complete the assignments, and find the course very rewarding and fun, with the ability to understand the theory behind and implement 3D graphics programs. Some students every year are able to use the course as a springboard to pursue graduate study in computer graphics, or to take up positions in the graphics industry.

This is the introductory graphics course. There are a number of follow-on courses in spring quarter, which I recommend if you are interested and do well in CSE 167. I will be teaching CSE 163, Advanced Computer Graphics, and Steve Rotenberg will likely be teaching CSE 168 on Rendering. We will also be offering an inaugural virtual reality course (Prof. Schulze, CSE 190). There are also courses in computer vision and related areas that may be of interest. If you will be here another year, I will likely teach a graduate course on advanced topics in graphics, CSE 274, next year and Prof. Jensen routinely teaches CSE 272 on advanced rendering in the spring.

Pre-requisites for the course:

  1. Solid C/C++ programming background. (If you only know Java/Python/etc, you may want to consider using this course as an opportunity to become familiar with C++.)
  2. Linear algebra and some basic mathematical skills (only high school math is strictly required and we have a review lecture).

Prior knowledge of computer graphics, OpenGL or GLSL is NOT required.

(We are aware that not all students are familiar with C/C++, but most pick it up without difficulties. If you are concerned about this aspect, we recommend that you study up before the class and speak to the TAs to come up to speed quickly. We do not spend any time in class teaching C/C++, since this is an upper division course).

Logistics: Lectures, Assignments and Exams

Lectures and sections will be held as noted at the top of the page.

Assignments comprise four projects (plus assignment 0), comprising primarily of programming. All projects are due by 11:59pm Pacific Time on the dates specified. You should plan ahead; in general, we will not accept excuses for server crashes, last minute delays uploading and so on close to the deadline. The final ray tracing programming assignment may optionally be completed in groups of two (requirements will be slightly more than if you were working alone). For more detail, see the assignments page.  In this case, it is your responsibility to make sure that you both contribute equally.  That is, we cannot accept "half" of an assignment from you if your partner failed to do his/her part. Please note that all assignments are to be done individually except for homework 4.

Feedback Server

One successful experiment in both past local courses and the online edX class is to have instant feedback servers to provide automatic feedback on all of the assignments. You upload your program or images, and the server produces a comparison with the true solution and a difference image. You can submit as many times as you like to the feedback servers as you improve your assignment. When you are satisfied, indicate the final feedback output in your submission. This year, using the feedback servers is compulsory, and all assignment submissions must include a link to the feedback server output. Please note that while we use the feedback server scores for the online courses, we will grade using the feedback output only as advisory for CSE 167. We may use other test cases, inspect code, and grade fairly based on the extent of the error. The feedback servers will be available via edX edge for most assignments (standalone servers will be announced when appropriate on Piazza, and the class mailing list, for the curves assignment).

Late Policy

Late Policy: Your grade will be reduced 15% (of your actual score) for each 12 hours late (or 30% per day). The late deduction is a step function. That is, you lose 15% of your score for being 1 min late or for being 11 hours 59 minutes late. You lose 30% of your score for being 12 hours and 1 minute late. After 3 days, no credit will be given. No extensions will normally be given, unless for very compelling personal reasons. Additionally, a stronger late policy may be followed for the final assignment to allow for timely grading. Also, if you do want an extension, you must ask for it as far in advance as possible, clearly stating the reason why; we will not usually give extensions close to the deadline or after the fact, except for clear emergencies and clearly unforeseeable circumstances. To avoid most of these issues, please START EARLY!


In addition to the programming projects, we will have a midterm and a small take-home written assignment in lieu of a final. The midterm will be in class. As noted above, there will be no formal final exam. We will go over some review questions in classes specially designated for that purpose. Doing well on the midterm will require following the material at the level of the content covered in the review sessions, as well as a basic understanding of course material. Some previous midterm and final questions are posted at the bottom of the assignments page.

Finally, please note that this course emphasizes programming, as in the four major homework assignments; these carry a much greater percentage of the grade than the midterm and written assignment, but you will likely want to do well in the latter as well to make the best final grade.

Programming and Collaboration Policy

Programming projects are to be implemented individually (except for the final project 4 which can be done in groups of two) from scratch. That is, you should not derive solutions from existing sources or previous instances of this course (including previous postings from the online course, at other universities etc). Discussion of programming projects is allowed (encouraged). Copying of solutions or code from other students, or from students who previously took this course in any university or online setting is not allowed. If you do obtain substantial help from the instructor, teaching assistant/tutor or another student, you must document this in your program. Furthermore, you should in general not copy code from other sources. If in doubt, please ask. Further specifics are given in the assignment specifications. Some assignments have skeleton code, others less so. You may feel free to re-use code from your own previous assignments at any time, particularly to handle window setup and interaction. (However, where required, you should follow the skeleton and only modify the required files for HW 0,1,2 and 3).

To repeat, you may not copy solutions or code from other students, or students who previously took this or a similar class at a university or online. You must clearly declare any code and ideas that came directly from others, as opposed to what you created yourself. If you fail to do so, we can only assume you are presenting your own work. Of course, presenting other people's work as your own is academic dishonesty. Note also that in group assignments (project 4 if you choose to do it in a group of two), you are collectively responsible for your project; both you and your partner can be held liable (just as you both receive credit for) the resulting assignment. Students who engage in dishonest activities, with an intent to alter their grade, will receive an F for the course and be reported to the University for further action. Note that you will also be held liable for publicly posting your code on github or other public websites, if another student subsequently copies from it.

Most of the assignments are based on OpenGL, a portable graphics library. Since everything about these assignments is portable, you can do them on any computer you want. We have tested the skeleton code on, and provide versions for Mac OS, Windows and Linux. In particular, one of the initial goals is to get set up with a suitable compilation environment. If there are issues, please speak to the instructor or teaching assistant.


Your final grades will be computed by weighting the assignments tentatively as follows (instructor reserves the right to change final weighting). Two-thirds of the grade is given for the homework assignments, and one-third for the midterm and final written assignment. (Please ignore the weighting scores on edX edge).

HW # Written Programming
0 5 5
1 0 30
2 0 60
3 0 40
Midterm 60 0
4 0 70
Written 30 0


I would first like to note that it is difficult to find a suitable graphics textbook; they all have their disadvantages. For some (many) of the topics, we will not be following any particular textbook. While it is useful to have a graphics text as a reference, it is not required, and this course is listed as having no required texts.

If you do want to purchase a text, you might want to consider some version of the OpenGL and GLSL books as a reference; otherwise you will constantly be looking things up online (which is ok too; there are many good tutorials available). As far as what the course tests, and therefore what you need to focus on in the reading, it will be based entirely on the lecture material, and for the most part, we provide online lectures for review. We note here some of the texts we recommend, along with commentary on the book's suitability.

If these books are not available in the campus bookstore or nearby stores, they are readily available with online booksellers like Amazon. Note also that previous editions of a textbook are generally adequate, but the chapters on this website will generally be with respect to the latest edition.

Recommended: The OpenGL Programming Guide Eighth Edition (The Red Book)

by Shreiner, Woo et al.

This is a comprehensive tutorial on the Graphics API we will be using for most of the course. The source code for most of the examples in the book is also available at OpenGL-RedBook, which can be a very useful resource (even if you don't buy the book). If you ever intend to write substantial graphics programs, you should have this book. If you don't buy it, you're probably going to be sharing someone else's, or trying to decipher sample code. Please note that you will be using this primarily as a reference, looking things up as and when you write code. In practice, you will gain more by actually doing and looking up what you don't know, rather than just reading the red book end to end. Also please note that the latest edition involves many changes (as the graphics pipeline itself has evolved in recent years). We will not in general be focusing on all the new features, so an old edition is probably ok, but we will touch on some recent developments, in particular the use of programmable shaders in OpenGL.

Recommended: The OpenGL Shading Language: Third Edition (Orange Book)

by Randi Rost.

This is the standard tutorial on the GLSL programmable shading system, that we will be using throughout the course. While the basics of GLSL are covered in the red book, I would highly recommend getting the orange book for a better explanation and deeper coverage. You may be able to get both red and orange books together as a package, and could also save on costs by getting the ebooks (since you will likely use these as a reference in any case).

Optional: Fundamentals of Computer Graphics

by Steve Marschner and Peter Shirley (4th edition)

This is a fairly simple text. The fourth edition is considerably expanded and (for reference only), we provide the chapters for the topics we cover in the course. The advantage is that it is easy to follow to get some understanding of the topics. The disadvantage is that the approach and content to the various topics may not quite follow the lectures, and some topics may be treated too simply or not very well at all. Most students like this textbook, and you should consider having it. However, it may not suffice well for all the material, and we will be closely following it only in the initial stages of the course. I have listed this as optional, not recommended, since there are a lot of textbooks for the class and we don't follow it exactly. It is far more important to get the OpenGL books if you are interested in buying something.

Supplementary: Computer Graphics: Principles and Practice (3rd Edition)

by Hughes, van Dam et al.

This is widely regarded as the bible of computer graphics, and is a comprehensive text. If you have further interest in graphics, like are considering taking the more advanced courses in the spring and next year, I would definitely recommend getting this. If not, I would still recommend being able to follow up in it, in case there are certain topics you want to see in more detail. The main disadvantage is the encyclopedic nature of the text, making the exposition quite complicated, that can go over the head for many students taking graphics for the first time.

Supplementary: An introduction to ray tracing

by Andrew Glassner

This is a useful reference for implementing the raytracer in assignment 4. Some parts of this will be handed out in class. There are many newer textbooks on ray tracing and rendering, including Glassner's encyclopedic two-volume work on Principles of Digital Image Synthesis.

In addition to the above, a number of other basic and advanced texts may be of interest for specific parts of the class, such as