Welcome to the exciting world of 2D game physics! This course provides an engaging introduction to the mathematics that underpin most physics engines. We will start with a comprehensive review of vectors, matrices, basic trigonometry, and delve into rigid-body collision, with a touch of calculus along the way.
Course Overview
Foundational Concepts
The lectures are designed to teach all concepts from first principles. Throughout our journey, we will explore essential physics topics such as velocity, acceleration, integration, mass, forces, gravity, drag, friction, rigid body dynamics, collision detection, and constraints.
Practical Application
We will transition from theory to practice by coding a simple 2D physics engine from scratch using the C++ programming language. Our initial focus will be on simulating particle physics to introduce concepts like movement, forces, displacement, and integration.
Next, we'll work with rigid bodies, incorporating shapes like circles, rectangles, and polygons into our objects. You'll learn how to implement collision detection and collision resolution between these rigid bodies.
The final part of our C++ implementation will involve adding constraints to our physics engine. This will enable the integration of complex objects like joints and ragdolls, enhancing engine stability and offering a platform to discuss intriguing ideas from calculus.
Required Tools
All you need is a basic code editor and a C++ compiler. We will utilize a cross-platform library called SDL to render our graphics. Whether you're using Windows, macOS, or Linux, a C++ compiler is readily available, allowing you to follow along seamlessly.
Additionally, prepare with pen and paper for the lectures. This course stands out from typical programming courses, as we thoroughly explicate every formula encountered during our discussions.
Gustavo Pezzi is a UK-based computer-science lecturer (Pikuma) and one of the most distinctive teachers working at the intersection of low-level programming and game development. His material is unusual in the modern course market for how deep it goes into the foundations: assembly, computer architecture, classical raycasting / rasterisation algorithms, and the math underneath modern graphics.
His CourseFlix listing reflects that range: courses on 3D Computer Graphics Programming, Raycasting Engine Programming, 2D Game Physics Programming, NES Programming with 6502 Assembly, PS1 Programming with MIPS Assembly & C, Atari 2600 Programming, Compilers, Interpreters and Formal Languages, plus C++ engine programming and Lua scripting. Material is paid and aimed at developers who want to understand systems from the ground up rather than ship CRUD apps.
Watch Online 191 lessons
This is a demo lesson (10:00 remaining)
You can watch up to 10 minutes for free. Subscribe to unlock all 191 lessons in this course and access 10,000+ hours of premium content across all courses.
With over 40,000 happy students and 12,000+ positive reviews, this course is Udemy's most popular course for learning ASP.NET MVC! ASP.NET MVC is a server-side
Learn to build 60 games in Construct 2 without coding. Master game development by building 60 practical projects. Learn to make art and design games in Photosho
34h 13m
Frequently asked questions
What prerequisites are needed for this course?
The course is designed to teach concepts from first principles, so no prior experience with game physics or advanced mathematics is required. However, a basic understanding of programming and familiarity with C++ is beneficial. The course involves coding a simple 2D physics engine from scratch using C++, so having some experience with this language will help in following along with the coding exercises.
What will I build during the course?
During the course, you will build a simple 2D physics engine using C++. The project begins with simulating particle physics to understand movement and forces. You will then implement collision detection and resolution for rigid bodies like circles, rectangles, and polygons. The final part involves adding constraints such as joints and ragdolls to enhance the engine's stability and functionality.
Who is the target audience for this course?
This course is aimed at individuals interested in understanding the mathematics and programming behind 2D game physics. It is suitable for beginners who have a basic understanding of programming and C++, as well as more experienced developers looking to deepen their knowledge of physics engines and their implementation in games.
How does the depth of this course compare to others on 2D game physics?
The course provides a comprehensive introduction to 2D game physics, covering foundational mathematics such as vectors, matrices, and basic trigonometry. It goes beyond basic concepts by including rigid body dynamics, collision detection, and constraints. While it thoroughly covers these topics, it is introductory in nature and focuses on building a foundational understanding rather than exploring advanced topics in game physics.
What specific tools will be used during the course?
The course primarily uses the C++ programming language for building the physics engine. You will need a basic code editor and a C++ compiler. The course also introduces the P5js web editor for visualizing errors and coding exercises early in the lessons. These tools provide a practical platform for implementing and testing the physics concepts covered in the course.
What topics are not covered in this course?
The course does not cover advanced 3D game physics or complex simulations that go beyond the scope of a 2D physics engine. It focuses strictly on 2D physics, including particle dynamics, rigid body collision, and basic constraints. High-level game development topics such as graphics rendering, sound design, and user interface development are also not addressed.
How much time should I expect to commit to this course?
The course consists of 191 lessons, providing an extensive exploration of 2D game physics. Although the total runtime is not specified, you should expect to invest a significant amount of time in both watching the lessons and engaging in the practical coding exercises. The time commitment will vary depending on your familiarity with the subject matter and your pace in completing the exercises.