This course includes

25 hours of ondemand video

Downloadable resources and exercises

Full lifetime access

Access on mobile and desktop

14day money back guarantee

Secure checkout through PayPal or Stripe
Prerequisites
Before taking this course, you must have:

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

An idea of what a Cstyle programming language looks like (for example: C++, Java, C#, JavaScript, or Swift).

Some experience with the commandline on either Linux, Windows, or macOS.
Is this course for you?
What you'll learn
Course overview and structure
Course Content

2
Dependencies and Folder Structure
 Installing Dependencies FREE PREVIEW
 Compilation
 Makefile
 Installing MinGW for Windows

3
SDL Initialization and Color Buffer
 Creating a SDL Window
 Rendering a Window
 Declaring a Color Buffer
 Allocating Memory and Freeing Resources
 SDL Texture
 Full Screen Window
 Drawing a Background Grid
 Drawing a Grid (Solution)
 Drawing a Rectangle
 Drawing a Rectangle (Solution)
 Background Color Patterns

4
Multiple Header Files
 Defining Header Files
 Implementing Header Files

5
Vectors and Points
 The Draw Pixel Function
 Color Buffer Quiz
 Vectors
 Vector Type Definition
 Working with 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
 Proposed Activity on Proving the Angle Cosine Addition
 Proof of Angle Cosine Addition

8
Fixed Game Loop
 Fixing our Game Loop Time Step
 Using a Proper Delay Function

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

10
Line Drawing
 Line Equation
 DDA Line Drawing Algorithm
 Implementing a Line Drawing Function

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

12
OBJ Files
 OBJ Files
 Reading OBJ File Content
 Loading OBJ File Information

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 Implementation
 Vector Normalization

14
Triangle Rasterization
 Triangle Fill
 A Filled Triangle with Solid Color
 The FlatBottom Triangle
 Drawing a FlatBottom Triangle
 The FlatTop Triangle
 Drawing the FlatTop Triangle
 Avoiding Division by Zero
 Different Rendering Modes
 Implementing Different Rendering Options
 Colored Triangle Faces

15
Sorting Faces by Depth
 Painter's Algorithm
 Sorting Activity
 Implementing a Sorting Function

16
Matrices
 Matrices Overview
 Matrix Multiplication
 Properties of Matrix Multiplication
 Examples of Matrix Multiplication
 2D Rotation Matrix

17
3D Matrix Transformations
 3D Matrix Transformations
 3D Scale Matrix
 Matrix Type Definitions
 Implementing a Scale Matrix
 3D Translation Matrix
 Implementing a Translation Matrix
 3D Rotation Matrices
 Implementing a Rotation Matrix
 The World Matrix

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

19
Light and Shading
 Flat Shading
 Flat Shading Implementation
 Smooth Shading

20
Flipped Vertical Values
 Inverted Y Values

21
Texture Mapping
 Texture Mapping
 Representing Texture Data
 Texture Type Definitions
 Textured Triangles
 Textured FlatBottom Triangle
 Textured FlatTop Triangle
 Barycentric Coordinates
 Barycentric Weights (α, β, γ)
 Drawing Texels
 Visualizing Textured Triangles

22
Perspective Correct Interpolation
 Perspective Correct Interpolation FREE PREVIEW
 Coding Perspective Correct Interpolation
 Reciprocal of W Per Vertex
 A Deeper Look into Perspective Correctness

23
Decoding PNG Files
 Decoding PNG Files
 Using PNG Files as Textures
 Freeing PNG Texture Resources

24
Textured OBJ Files
 Loading OBJ Texture Attributes
 Visualizing Textured OBJ Models

25
ZBuffer
 ZBuffer
 ZBuffer Implementation
 Filled Triangles ZBuffer Exercise
 Filled Triangles ZBuffer Implementation
 Dynamic Memory Allocation

26
Camera
 Camera Space
 Look At Camera Model
 Look At Transformations
 Look At Function
 Implementing the Look At Model
 Delta Time Factor
 FPS Camera Movement
 Implementing FPS Camera Movement

27
Conclusion and Next Steps
 Handedness and Orientation
 Dedicated Graphics Cards
 Modern Graphics APIs
 Next Steps
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

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 
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
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