Skip to content

Berkeley CS184: Introduction to Computer Graphics

Introduction

UC Berkeley's computer graphics course, taught by Professor Ren Ng. The course covers the three core areas of graphics: Modeling, Animation, and Rendering. Through a series of programming projects, students build a complete graphics system from scratch, including 3D model loading, physics simulation, and ray tracing.

CS184 emphasizes both theory and practice: every concept corresponds to a hands-on project, helping you understand each stage of the graphics pipeline through implementation. The course uses C++ and OpenGL, requiring students to have some programming foundation.

Prerequisites

  • C++ programming skills: Course projects use C++; familiarity with pointers, memory management, and OOP is required
  • Linear algebra: Matrix transformations and vector operations are fundamental mathematical tools in graphics
  • Calculus: Understanding lighting models and physics simulation requires basic calculus
  • Data structures: Trees and graphs are widely used in scene graphs and acceleration structures

Difficulty

🌟🌟🌟🌟 (Intermediate-High)

The course has a certain math and programming barrier, but explanations are clear and projects are well-designed. Best suited for learners with some prior foundation.

Estimated Study Hours

Approximately 80-100 hours (15-week course, ~5-7 hours per week)

  • Lectures: 2 hours/week
  • Programming projects: 3-5 hours/week (5 projects total)
  • Reading and review: 1-2 hours/week

Resources

  • Course homepage: inst.eecs.berkeley.edu/~cs184/
  • Lecture videos: Some semesters available on YouTube
  • Project code: Open-source project frameworks on GitHub

Self-Study Tips

  1. Complete every project in order. CS184's projects are progressive — each builds on the last. Don't skip any.

  2. Understand the math before writing code. Before starting each project, make sure you understand the underlying mathematical principles. For example, before doing ray tracing, fully grasp the geometric derivation of ray-triangle intersection.

  3. Use debugging tools wisely. Graphics debugging is painful — a misaligned matrix can make the entire scene disappear. Learn to use printf debugging, verifying the result of each transformation step by step.

  4. Reference Real-Time Rendering. The course's recommended textbook Real-Time Rendering is the bible of real-time rendering. Read relevant chapters alongside the course.

  5. Combine with Godot practice. Since you're building games with Godot 4, try applying rendering techniques from CS184 to Godot's custom shaders to deepen your understanding.