This course includes

  • 30 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 an SDL Window
    • Rendering an SDL Window
    • Declaring a Color Buffer
    • Allocating Memory and Freeing Resources
    • Quiz: Memory Allocation
    • SDL Texture
    • Full Screen 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
  • 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
    • 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 Code
    • Vector Normalization
  • 14
    Triangle Rasterization
    • Triangle Fill
    • Flat-Bottom & Flat-Top Technique
    • Activity: Find Triangle Midpoint
    • Solution to the Triangle Midpoint
    • Coding the Triangle Midpoint Computation
    • Flat-Bottom Triangle Algorithm
    • Flat-Bottom Triangle Code
    • Flat-Top Triangle Algorithm
    • Flat-Top Triangle Code
    • Avoiding Division by Zero
    • Exercise: Selecting Different Render Modes
    • Different Rendering Options Solution
    • 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
  • 18
    Projection Matrix
    • Defining a Projection Matrix
    • Coding the Perspective Projection Matrix
    • Perspective Projection Matrix Review
    • Normalized Device Coordinates
    • Projection in OpenGL
    • Row-major and Column-major Orders
    • Order of Transformations for Row-major and Column-major
  • 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 Flat-Bottom Triangle
    • Textured Flat-Top Triangle
    • Barycentric Coordinates
    • Barycentric Weights (α, β, γ)
    • Visualizing Textured Triangles
  • 21
    Perspective Correct Interpolation
  • 22
    Decoding PNG Files
    • Decoding PNG Files
    • Loading PNG File Content
    • Freeing PNG Textures
  • 23
    Textured OBJ Files
    • Loading OBJ Texture Attributes
    • Visualizing Textured OBJ Models
    • Preventing Texture Buffer Overflow
  • 24
    Z-Buffer
    • Z-Buffer
    • Z-Buffer Code
    • Exercise: Z-Buffer for Filled Triangles
    • Implementing a Z-Buffer 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 Low-Resolution 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
    • Next Steps

Instructor

  • Gustavo Pezzi

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