CSE 167 (FA 2022) Computer Graphics

Welcome to CSE 167, Introduction to Computer Graphics.

Office hour OH location
(all in CSE Building (EBU3B))
Instructor Albert Chern Tue 3pm–4pm 4112 Mac
TA Abhinav Gupta Wed & Fri Tue & Thu 8:30am–9:30am B270A Mac(Arm), Linux
TA Mohammad "Sina" Nabizadeh Tue 1:00pm–2:00pm Tue 1:30pm–2:30pm B215 Windows, Mac, Linux
TA Dylan Rowe Mon 10am–12pm B275 Mac
TA Baichuan "Peter" Wu Thu 2pm–3pm and Fri 10am–11am (in person), and Wed 1pm–2pm (zoom, see link on piazza) B240A Windows, Mac, Linux
Tutor Ziyan "Flynn" Sui Fri 2pm–3pm Thu 5:30pm–6:30pm B215 B275 Mac(Arm)
Tutor Yunchao "Evan" Yao Mon 5pm–6pm B240A Windows, Linux


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 (sign up link https://piazza.com/ucsd/fall2022/cse167).  This is where we discuss questions in HW or lectures.
  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 https://www.gradescope.com/courses/444876 (entry code: K3N5V7).  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. 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.  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).
  5. HW0 is due 9/30 (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 homework solutions 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.
  • 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 written exercises: 40%
  • Programming HW0: 5%
  • Programming HW1: 5%
  • Programming HW2: 10%
  • Programming HW3: 10%
  • Programming HW4: 10%
  • Final project: 20% (+ 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

  • HW0–4 and Exercises 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/23: Introduction to computer graphics
1 9/26: Graphics pipeline, OpenGL 9/28: OpenGL 9/30: Linear algebra
2 10/3: Linear algebra 10/5: 3D rotations, quaternions 10/7: Euler angles, geometric algebra
  • Slides (3D Rotations) (continued)
  • Interactive demos for 3D rotations
  • 3 10/10: Affine geometry, transformations 10/12: Projective geometry 10/14: Projective geometry
    4 10/17: Hierarchical modeling 10/19: Hierarchical modeling, Lighting 10/21: Lighting
    5 10/24: Barycentric coordinates 10/26: Textures 10/28: Environments, Bumps and Shadows
    6 10/31: Splines 11/2: Bézier curves, B-splines 11/4: B-splines, Subdivision, Surfaces
    7 11/7: Ray tracing
  • Slides (Surfaces) (continued)
  • Slides (Ray tracing)
  • 11/9: Ray tracing/Global illumination 11/11 Holiday (Veterans Day)
    8 11/14 Instructor out of town
    (lecture will be pre-recorded)
    Radiosity, rendering equation
    11/16: Physics-based animation 11/18: Rigid body motion
  • Slides (Animation) (continued)
  • 9 11/21: Color
  • Slides (Color)
  • 11/23: Transparency 11/25 Holiday (Thanksgiving)
    10 11/28: Volume rendering, Spatial data structures
  • Slides (Alpha compositing) (continued)
  • Slides (Spatial data structures)
  • 11/30: Geometry processing 12/2: Toon shading and miscellaneous topics
    Final 12/5: No class 12/7: No class
    • Final project due
    12/9: No class
    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. 5%: 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 .
    • Tomas Akenine-Möller, Eric Haines, Naty Hoffman, Real-Time Rendering. Good textbook of what we cover in the course (You can access free online version on UC Library).
    • John Hughes et al, Computer Graphics: Principles and Practice. Another classic textbook on 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!