CSE 167 (FA 2021) Computer Graphics

Welcome to CSE 167, Introduction to Computer Graphics.

  • Lecture: Mon Wed Fri 15:00 - 15:50
  • Discussion Session: Fri 12:00-12:50
  • Classroom: Center Hall 214. You can also participate the class via Zoom.
  • Instructor: Albert Chern (office hour (OH) Tue 15:30–16:30 CSE 4112) (Mac)
    • TA: Joseph Warmus (OH Tue 14:30–15:30 CSE B270A) (Windows)
    • TA: Dylan Rowe (OH Wed 12:00–13:00 CSE B270A) (Mac)
    • Tutor: Baichuan Wu (OH Wed 9:00–10:00 CSE B240A) (Mac, Linux)
    • Tutor: Edward Xie (OH hour Mon 13:00–14:00 CSE B270A) (Windows)
  • Sites:
    • This page: Slides, lecture notes, HW
    • Canvas: Link to Zoom (and Zoom recordings), link to Gradescope, and link back to this page.
    • Piazza: piazza.com/ucsd/fall2021/cse167 Q&A forum for the class.
    • Gradescope: gradescope.com/courses/315208 (log in with School credential, entry code: RW3XEG) HW submission.
  • Lecture note: Introduction to Computer Graphics

Visit Canvas (for all info including Zoom links), Gradescope (HW submission) and Piazza (Q&A).


Computer graphics is the use of computing to synthesize visual informations. Specifically, it is a process of converting a mathematical representation of the geometric data to a set of pixel colors, so that the outcome best visualizes the virtual world. This course provides an introduction to computer graphics with the following focuses:

  • 3D computer graphics system: Modern graphics pipeline with OpenGL and GLSL.
  • Geometry of our 3D world: Linear algebra for Euclidean, affine and projective geometries.
  • Lights and shadows: Color the pixels according to basic optics.
  • Color and transparency: The mathematical relationship between the physical, perceptional, and displayed color. The algebra of compositing translucent colors.
  • Vector graphics: Generate smooth curves and surfaces from a few control points.
  • Photorealism: A glimpse into ray tracing and global illumination.
  • Physical simulation: A glimpse into physically realistic animated special effects.


  • C++ (knowledge of C or Java should be adequate to learn C++)
  • A computer (laptop or desktop) capable of running Homework 0.
  • Basic linear algebra: vectors and matrices.
  • Calculus: This is not a hard requirement. Some notions of differentiation and integration with one or more variables may show up towards the end of the course as we discuss about smooth geometries, physical simulations and global illuminations.

Course Logistics

Getting Started (make sure to follow it in Week 1)

  1. Sign up to Piazza.  This is where we discuss questions in HW or lectures. Join via https://piazza.com/ucsd/fall2021/cse167.
  2. Alternatively, go to Piazza -> getting started as a student -> search schools "University of California, San Diego" (full name, with comma), and then search for "cse 167."
  3. Sign up to Gradescope.  This is where you submit all the homework and the weekly one-minute paper.  Enroll to CSE 167 on gradescope using the @ucsd.edu email https://www.gradescope.com/ .  You probably have already got an email notification as enroll the list of students from canvas.  You can also access gradescope from Canvas (on the side menu).
  4. Submit weekly one-minute report.  It is a feedback form due every Friday Saturday night.  It takes only a minute.  Make sure to catch up on all lectures of the week, and tell us what you have learned or what you don't get.  Each week's one-minute report worths 1% of your final grade (10% in total for ten weeks).  You will earn those points for free by writing anything meaningful (don't leave it blank though)!
  5. Attend the lecture in-person or remotely (or watch the replay as soon as possible).  The lectures are live lectures in the classroom which are also broadcasted via Zoom simultaneously.  This is a big class, and the pandemic is not really over, so in-person lectures are still risky. If you don't feel comfortable attending the lectures, you are welcome to attend the classes remotely. If you miss the class, please watch the recording as soon as possible.  Note that Zoom recording on Canvas tends to automatically delete recordings after 30 days; let me know on Piazza if you have trouble reviewing earlier video as I can revive the videos from trashcan.  Take notes, read slides (will be available on Syllabus).
  6. HW0 is due 10/1 (Friday).  HW0 is there in order to make sure you can compile the skeleton code.  

Class Rules

  • Do the assignments individually except for the final project. Discussion is encouraged but the final work should be independent work. The final project is done by a group of two collaborating people or by a group of a single person.
  • Do NOT share your HW1–4 source code online (such as on your github) even after the course. These are viewed as homework solutions and we do not want to spoil the future course takers. The final project is an exception: you can show off what you have accomplished in the final project in your future career.
  • You can look up coding questions online. The course makes extensive use of OpenGL and C++. While no prior knowledge of OpenGL is required, you'll be expected to look it up largely from online documentations / forums / tutorials for specific questions you encounter.  You are also welcomed to post conceptual questions (and answer others' questions) on Piazza.
  • to follow Academic Integrity (c.f. https://senate.ucsd.edu/Operating-Procedures/Senate-Manual/Appendices/2).


There is no quiz or exam. The grades are made of the following HWs and project:

  • Weekly one-minute report: 10%
  • HW0: 5%
  • HW1: 15%
  • HW2: 15%
  • HW3: 15%
  • HW4: 15% (+ up to 5% bonus)
  • Final project: 25% (+ up to 5% bonus)
The final letter grade depends on the grade distribution. The passing grade is 70%.
Curve the grade: If over 3/4 of the class have completed CAPE course evaluation, then we will apply curve to boost everyone's letter grade.

Late policy

  • We don't accept any late submission for the one-minute report.
  • HW0–4 late penalty: If the late submission lies in the interval \([(n-1)\cdot 24 {\rm hr} , n\cdot 24{\rm hr})\) after the deadline, the homework grade will be multiplied by \((10-n)/10\).  For example 1st day late submission is scaled by 90%; 2nd day late submission is scaled by 80%; and so on.  After the 10th day, that assignment grade stays 0%.
  • No late submission for final project. Submit whatever you have if it is not finished.


Week Monday Wednesday Friday
0 9/24: Introduction to computer graphics
1 9/27: OpenGL 9/29: OpenGL 10/1: OpenGL
2 10/4: Linear algebra
  • Slides (OpenGL recap)
  • Slides (Linear algebra)
  • 10/6: 3D rotations / Affine geometry 10/8: Euler angles, quaternions and geometric algebra
    3 10/11: Affine geometry 10/13: Transformations recap, Projective geometry 10/15: Projective geometry
    4 10/18: Hierarchical modeling 10/20: Hierarchical modeling 10/22: Lighting
    • Slides (Lighting)
    • Deadline for all students to drop classes without "W" grade on transcript.
    • Deadline for undergrad students to change units.
    5 10/25: Barycentric coordinates 10/27: Textures 10/29: Environments, Bumps and Shadows
    6 11/1: Splines, Bézier curves 11/3: B-splines 11/5: Subdivision
    7 11/8: Ray tracing 11/10: Global illumination 11/12: Rendering equation
    8 11/15: Physics-based animation 11/17: Classical mechanics 11/19: Rigid body motion
    9 11/22: Color 11/24: Transparency 11/26 Holiday (Thanksgiving)
    10 11/29: Geometry processing 12/1: Outlook 12/3: Outlook
    Final 12/6: 12/8:
    • Final project due
    Winter break


    Final project

    Final project can be submitted in a group of two collaborating people, or a singleton group of one person. You can choose to work on one of the topics: The final project includes 3 components:
    1. 10%: Write-up (PDF file) (or a link to accessible google doc, github webpage, etc): Introduce the topic, briefly explain the math/physics underpinning the method, describe the algorithm. Show your understanding of the topic by explaining the subject to the reader.
    2. 5%: Implementation (source code): Let us look at the source code.
    3. 10%: Demonstration: A compilation of your favorite results that best show the significant points of the topic. This demonstration can be of a form of a video clip. If the work is very static, then you can just put a result section in your write-up as the demonstration. We encourage a video since a video is useful for showing your user interface design for your program, and definitely useful for showing an animated result.
    4. 5%: Bonus for excellent final projects.
    If for some reason you couldn't make the code work in time, you can still get partial credits if you have a good write-up.


    There is no specific required textbook for this course. But if you are confused with the lectures or you want to see various expositions, here are a few books that you may want to look up.

    • The course lecture note .
    • John Hughes et al, Computer Graphics: Principles and Practice. It is known as the bible of computer graphics. It is comprehensive and can gain a broad view in graphics.
    • Steven Gortler, Foundations of 3D Computer Graphics. Careful mathematical exposition within a CG API. If there is confusion in math (what is basis, vector, components) it is good to see how this book handles them.
    • Steve Marschner and Peter Shirley, Fundamentals of Computer Graphics. It is a fairly simple text and is easy to follow.
    • OpenGL books: the Red Book (Shreiner, Woo et al.), the Orange Book (Randi Rost.), etc. These are the canonical programming guide.
    • Online resources https://learnopengl.com/ You can find many topics of our course; following the website step by step should make everything work!