This course includes

  • 25 hours of on-demand video

  • Downloadable resources and exercises

  • Full lifetime access

  • Access on mobile and desktop

  • 14-day money back guarantee

  • Secure checkout through PayPal or Stripe

Watch Intro Video

Motivations & Learning Outcomes

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 C-style programming language looks like (for example: C++, Java, C#, JavaScript, or Swift).

  • Some experience with the command-line on either Linux, Windows, or macOS.

Is this course for you?

Did you ever wonder how 3D engines render objects on the screen? Or how graphics APIs such as OpenGL or DirectX are written? This course is a complete immersion on how CPU-based 3D engines work. We will use C to develop a complete 3D engine from scratch, pixel by pixel, triangle per triangle. This is a basic course that requires no prior knowledge, but you will probably make the most of it if you know already the basics of programming.
Buy $19.99
Is this course for you?

What you'll learn

Course overview and structure

This course is a complete journey into the world of 3D rendering. We will learn how to represent and display 3D objects without any graphics API. No OpenGL. No DirectX. No GPU. Just you, your C compiler, a smoking processor, and an array of pixel colors willing to dance 90's style. You will learn how to draw pixels, rasterize lines, triangles, complex 3D models, and understand the theory and the math behind computer graphics programming. If you want to understand how computer graphics really work, join us now!
Buy $19.99
What you'll learn
  • Lifetime access

    Enroll now and get lifetime access to the course content

  • Access to discussion forum

    Discuss course topics and engage with other students using the discussion board

  • Money back guarantee

    We offer a 14-day money back guarantee for all our courses. No questions asked.

Course Content

  • 2
    Dependencies and Folder Structure
  • 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
    • Back-face Culling Motivation
    • Back-face Culling in Games
    • Vector Magnitude
    • Vector Addition and Subtraction
    • Vector Scalar Multiplication and Division
    • Vector Cross Product
    • Finding the Normal Vector
    • Dot Product
    • Back-face Culling Algorithm
    • Back-face Culling Implementation
    • Vector Normalization
  • 14
    Triangle Rasterization
    • Triangle Fill
    • A Filled Triangle with Solid Color
    • The Flat-Bottom Triangle
    • Drawing a Flat-Bottom Triangle
    • The Flat-Top Triangle
    • Drawing the Flat-Top 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
    • Row-major and Column-major Orders
  • 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 Flat-Bottom Triangle
    • Textured Flat-Top Triangle
    • Barycentric Coordinates
    • Barycentric Weights (α, β, γ)
    • Drawing Texels
    • Visualizing Textured Triangles
  • 22
    Perspective Correct Interpolation
  • 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
    Z-Buffer
    • Z-Buffer
    • Z-Buffer Implementation
    • Filled Triangles Z-Buffer Exercise
    • Filled Triangles Z-Buffer 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

  • Gustavo Pezzi

    Senior Lecturer

    Gustavo Pezzi

    Gustavo teaches computer science and mathematics at BPP University, London. He researches how teaching game programming can help enhance awareness and understanding of 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, web systems, databases, and data science. 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 More

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

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

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

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

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

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

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

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