This course includes:
(updated Jan 2021)

35 hours of ondemand video

Downloadable resources and exercises

Full lifetime access

Access on mobile and desktop

14day money back guarantee

Certificate of completion

Secure checkout through Credit Card or PayPal
Is this course for you?
Prerequisites
Before taking this course, you must have:

A basic understanding of programming fundamentals, such as variables, conditionals, loops, and functions.

Some familiarity with the commandline on either Linux, Windows, or macOS.
Technologies we'll use and learn
We will learn how to represent and display 3D objects without any graphics API.
No OpenGL. No DirectX. No GPU... Just you, a C compiler, a smoking processor, lots of linear algebra, and an array of pixels willing to dance 90's style.
We'll use the C programming language and a library called SDL to gain access and poke the pixels of our display.
What you'll learn
Here are the topics you'll learn in this course

C programming language & SDL

Rasterization of lines and triangles

Render flatshading and textured 3D meshes

Linear algebra and the mathematics of computer graphics

Load and render external OBJ files

Projection, light, shading, and camera

Texture mapping

ZBuffer & 3D Clipping
Focus on the fundamentals
Projectbased learning
Course Content

2
Dependencies and Folder Structure
 Installing Dependencies FREE PREVIEW
 The Compilation Flow
 Working with Makefiles
 Configuring Visual Studio for Windows
 Configuring MinGW for Windows

3
SDL Initialization and Color Buffer
 Creating an SDL Window
 Rendering an SDL Window
 Declaring a Color Buffer
 Allocating Memory and Freeing Resources
 Checking for Errors in Memory Allocation
 Quiz: Memory Allocation
 The Operator Sizeof
 SDL Texture
 Fullscreen Window
 Exercise: Drawing a Background Grid
 Drawing a Background Grid
 Background Color Patterns
 Exercise: Drawing Rectangles
 Creating a Function to Draw Rectangles
 Quiz: Color Buffer

4
Multiple Header Files
 Defining Header Files
 Coding New Header Files

5
Vectors and Points
 The Draw Pixel Function
 Vectors
 Declaring a Vector Type
 Review of C Structs
 Array of Points
 Constant Array Size Declaration

6
Projecting Points
 Orthographic Projection
 Isometric Projection
 Perspective Projection
 Implementing the Perspective Divide
 Coordinate System Handedness

7
Linear Transformations
 Vector Transformations
 Review of Sine Cosine and Tangent
 Trigonometric Functions Quiz
 Rotating Vectors
 Vector Rotation Function
 Proof of Angle Sine Addition
 Exercise: Proving the Angle Cosine Addition
 Proof of Angle Cosine Addition

8
Fixed Game Loop
 Fixing our Game Loop Time Step
 Using a Delay Function
 Capped Framerate & Delta time

9
Triangles and Vertices
 Triangles and Meshes
 Vertices and Triangle Faces
 Triangle Edges

10
Line Drawing
 Line Equation
 DDA Line Drawing Algorithm
 Coding a Function to Draw Lines

11
Dynamic Arrays
 Dynamic Arrays
 Dynamic Mesh Vertices and Faces
 Separation of Vertex and Faces

12
OBJ Files
 OBJ Files
 Exercise: Loading OBJ File Content
 Loading OBJ File Content
 OBJ Files as Quads or Triangles

13
Vector Operations
 Backface Culling Motivation
 Backface Culling in Games
 Vector Magnitude
 Vector Addition and Subtraction
 Vector Scalar Multiplication and Division
 Vector Cross Product
 Finding the Normal Vector
 Dot Product
 Backface Culling Algorithm
 Backface Culling Code
 Vector Normalization

14
Triangle Rasterization
 Triangle Fill
 FlatBottom & FlatTop Technique
 Activity: Find Triangle Midpoint
 Solution to the Triangle Midpoint
 Coding the Triangle Midpoint Computation
 FlatBottom Triangle Algorithm
 FlatBottom Triangle Code
 FlatTop Triangle Algorithm
 FlatTop Triangle Code
 Avoiding Division by Zero
 Exercise: Selecting Different Render Modes
 Different Rendering Options Solution
 Compiler Error & Enum Declaration
 Typedef for Color Values
 Colored Triangle Faces

15
Sorting Faces by Depth
 Painter's Algorithm
 Exercise: Sorting Faces
 Coding a Sorting Function

16
Matrices
 Matrices Overview
 Matrix Operations
 Properties of Matrix Multiplication
 Examples of Matrix Multiplication
 Exercise: Matrix Multiplication
 2D Rotation Matrix

17
3D Matrix Transformations
 3D Matrix Transformations
 3D Scale Matrix
 Matrix Typedef
 Scale Matrix Code
 3D Translation Matrix
 Translation Matrix Code
 3D Rotation Matrices
 Rotation Matrix Code
 The World Matrix
 Order of Transformations
 Translation is Not a Linear Transformation

18
Projection Matrix
 Defining a Projection Matrix
 Coding the Perspective Projection Matrix
 Perspective Projection Matrix Review
 Normalized Device Coordinates
 Projection in OpenGL
 Rowmajor and Columnmajor Orders
 Order of Transformations for Rowmajor and Columnmajor

19
Light and Shading
 Flat Shading
 Coding Flat Shading & Light
 Smooth Shading Options
 Inverted Vertical Screen Values

20
Texture Mapping
 Texture Mapping
 Representing Textures in Memory
 Texture Typedef
 Textured Triangles
 Textured FlatBottom Triangle
 Textured FlatTop Triangle
 Barycentric Coordinates
 Barycentric Weights (α, β, γ)
 Visualizing Textured Triangles

21
Perspective Correct Interpolation
 Perspective Correct Interpolation FREE PREVIEW
 Perspective Correct Interpolation Code
 A Deeper Look into Perspective Correct Theory
 Inverted Cube UV Coordinates

22
Decoding PNG Files
 Decoding PNG Files
 Loading PNG File Content
 Freeing PNG Textures

23
Textured OBJ Files
 Loading OBJ Texture Attributes
 Preventing Texture Buffer Overflow
 Rasterization Rules
 Visualizing Textured OBJ Models

24
ZBuffer
 ZBuffer
 ZBuffer Code
 Exercise: ZBuffer for Filled Triangles
 Implementing a ZBuffer for Filled Triangles
 A Discussion on Dynamic Memory Allocation

25
Camera
 Camera Space
 Look At Camera Model
 Look At Transformations
 The LookAt Function
 Coding the LookAt Function
 Delta Time Factor
 A Simple FPS Camera Movement
 Coding a Simple FPS Camera Movement

26
Clipping
 Frustum Clipping
 Planes
 Exercise: Right Frustum Plane Point & Normal
 Defining Frustum Planes Points & Normals
 Initializing an Array of Frustum Planes
 Defining Points Inside and Outside Planes
 Intersection Between Line & Plane
 Clipping a Polygon Against a Plane
 Polygon Typedef
 A Function to Clip Polygon Against Planes
 Coding the Function to Clip Polygons Against Planes
 Converting Polygons Back Into Triangles
 Visualizing Clipped Triangles
 Horizontal & Vertical FOV Angles
 Clipping Texture UV Coordinates
 Clipping in Image Space
 Deciding What Not to Render

27
Code Polishing & Refactoring
 Working with Static Variables
 Refactoring SDL Globals
 Simulating LowResolution Displays
 Refactoring Light Globals
 Exercise: Camera Pitch Rotation
 Implementing the Camera Pitch Rotation

28
Multiple Meshes
 Declaring Multiple Meshes
 Implementing Multiple Meshes
 Implementing Multiple Textures

29
Conclusion and Next Steps
 Finishing our Implementation
 Handedness and Orientation
 Dedicated Graphics Cards
 Modern Graphics APIs & Shaders
 Modern 3D Hardware Techniques
 Next Steps
 Copyright & Content Distribution
 Similar Courses
FAQ

Will this course work for any operating system?
The code we'll create will work for Linux, macOS, Windows, and even RaspberriPi.

What if I don't know anything about the C programming language?
Not a problem. Many students come from different languages (C++, Java, Python, JavaScript, Swift, etc.). A basic understanding of coding in any language is enough for you to follow along. We'll learn the details of the C language together.

What if I have any issues or questions?
Each lecture has its own discussion board, where you can interact and ask other students for help.
Instructor

Senior Lecturer
Gustavo Pezzi
Gustavo teaches computer science and mathematics at BPP University, London. He studies how teaching game programming can help enhance awareness and understanding of basic mathematics and physics. He is also a professional software engineer with more than 10 years of experience, with an industry background in 3D systems, games, systems, databases, and data analysis. His academic path includes institutions such as Pittsburg State University, City University of London, and University of Oxford.
Reviews

I wish I had this course at the beginning of my career !
N PA
As a self taught programmer (that is now working in the game industry) I wish I had this course at the beginning of my career. I bought it because I want to ...
Read MoreAs a self taught programmer (that is now working in the game industry) I wish I had this course at the beginning of my career. I bought it because I want to support those kind of materials! I basically learned all this stuff by myself through books and articles, but this course is a all in one place to learn them all at once, in a fun/approachable and motivating way that will make you save some precious time. Even if this is a good refresher for me and I already had the "clicks" before, I'll recommend it for anyone wanting to become a graphics/game/programmer !
Read Less 
Great course
Bill All
Been waiting for a course like this for years. A lot of the theory of 3d graphics is availablein books and online , but none that put it into practice in su...
Read MoreBeen waiting for a course like this for years. A lot of the theory of 3d graphics is availablein books and online , but none that put it into practice in such a clear way (if at all) . Also using C which I am more comfortable using than OOP (i'm a bit old school) . It is a great refresher on C too, its a big project so far (only a bout 1/3 of the way through), but loving it so far.
Read Less 
Very good course and very well explained
jérémy aldebert
The course is very understandable. Everything is explained in detail with clarity. I am very happy.
The course is very understandable. Everything is explained in detail with clarity. I am very happy.
Read Less 
The real 3d graphics fundamentals course
Andrew Douglas
This course going into details which are usually if not always omitted by other courses in this category. I liked that the math and actual algorithms were di...
Read MoreThis course going into details which are usually if not always omitted by other courses in this category. I liked that the math and actual algorithms were discussed before implementing them and student own problem solving opportunity was encouraged throughout. This course has enabled me to fill in the critical gaps in some of the most important fundamental concepts in 3d graphics programming. Hope to see more!! Thank you.
Read Less 
Great Course
Peter Lous
If you want to learn the fundamentals of 3d graphics this course is for you! Easy to follow explanations. The teacher really wants you to understand everythi...
Read MoreIf you want to learn the fundamentals of 3d graphics this course is for you! Easy to follow explanations. The teacher really wants you to understand everything! I hope Gustavo will create a follow course to explain more advanced topics. Or a course to build a ray tracer or ray marcher.
Read Less 
Awesome course!
Igor Semenov
I'm working as game developer for 5 years, and it was always a black box all things that touch rendering stuff. If you want to understand that black box you ...
Read MoreI'm working as game developer for 5 years, and it was always a black box all things that touch rendering stuff. If you want to understand that black box you should definitely take this course! Gustavo is a perfect teacher! Thank you a lot!
Read Less 
Amazing introductory course
Diego Casanova
Gustavo's explanations are really clear, and the content is really good, you'll end up with a little 3d engine that can be easily extended. I really recommen...
Read MoreGustavo's explanations are really clear, and the content is really good, you'll end up with a little 3d engine that can be easily extended. I really recommend this course!
Read Less 
Best Course to Learn 3D Graphics from Scratch
Joshua Torres
If you truly want to learn how things work under the hood when it comes to computer graphics, this is the course for you. You'll come out of here with a grea...
Read MoreIf you truly want to learn how things work under the hood when it comes to computer graphics, this is the course for you. You'll come out of here with a greater appreciation for mathematics as well. I myself want to learn more about engine development and this course has given me the confidence to pursue that.
Read Less 
The best course on computer graphics for beginners
Pedro Ganme
The most impressive characteristic of this course is the maths reviews. You really get to understand the logic behind each formula. Thank you!
The most impressive characteristic of this course is the maths reviews. You really get to understand the logic behind each formula. Thank you!
Read Less 
Amazing Content
TUGSAD AYDIN

Simply the Best Online Lecture Series on 3D Graphics Prog...
Steve Merritt
If I could recommend one course to take whether you're an aspiring graphics/game developer or an industry veteran like myself, this would be my top pick. ...
Read MoreIf I could recommend one course to take whether you're an aspiring graphics/game developer or an industry veteran like myself, this would be my top pick. I wish I could have taken this course 20 years ago when I was still just a college kid dabbling in graphics and game programming for the first time. Since then, I've read countless tutorials, articles, books, and blogs, watched a number of online videos on these topics, even worked with graphics programmers in the industry. None of these sources have presented the material as well as Gustavo has in this lecture series. His teaching style is engaging, intuitive, and to the point. He also does an excellent job of breaking down complex topics into digestible chunks. As each lecture or section concluded, armed with a new understanding or renewed sense of clarity on various topics, I revisited old books and source code that I had previously found somewhat daunting. It was an amazing feeling to read through these materials again and discover that I now understood the concepts being presented. Equally amazing was the ability to take these ideas and apply them to the very visual, working example software renderer that is developed throughout the course. To add icing on the cake, Gustavo is also very active in lecture discussions and readily answers questions. He also takes the time to revise course material when necessary rather than just posting errata as other instructors tend to do. This course is an incredible ride from start to finish. Gustavo not only teaches the fundamentals of 3D graphics, he also teaches mathematics that are widely used in many areas of game development. By the end, you will have gone from drawing a single pixel on the screen to rendering a fully textured, lit, culled 3D model, and know the math and algorithms that make it possible! You will also have a greater appreciation and understanding of how modern graphics APIs work under the hood.
Read Less