A flexible physic engine | Debugging tools.
Browse the docs »
Screenshots
·
Report Bug
·
Request Feature
Table of Contents
This project started from a personal challenge: recreate physical principles in a simulation running in real time. I also wanted this project to easily convey some understanding of how it works, as well as analysis and debugging tools.
The objective was to learn more about such topics as:
- Gravity (Classical mecanics one, he goal was not to model objects at the molecular level)
- Collisions (With Newton's 3rd law)
- Friction (Approximation with dissipation in heat)
- Electromagnetic fields (IN WORK, see https://github.com/mlhoutel/Fields)
- Fluids (IN WORK)
This project also allows me to familiarize myself with several areas of programming, such as:
- Graph Theory and advanced Data structures like Quadtrees
- C++ programs/libraries compilation (Mingw batch/ CMake)
- Memory allocation and Classes Inheritances
- Optimisation and Algoritmics
- Threads and Graphical acceleration with CUDA (?)
As this program is oriented towards testing and comparison, a modular structure has been set up.
Modularity:
- Precision (at build time):
- float
- double
- Dimension (at build time):
- 2D
- 3D
- Broad phase structure (at run time):
- Spacial grid
- Quad-tree
- kD-tree
- Integration method (at run time):
- Euler
- Verlet
- RK4
To summarize this is an introduction to the basic concepts and functions of 2D physical simulation (applicable to 3D thereafter).
The ultimate goal would be to present an easy-to-use and optimized physical engine, a bit like a simplified "Algodoo".
Currently in dev, you can see a very messy roadmap here
- SFML - The Graphical library
- ImGui - The GUI library
- ImGui::SFML - The Binder library
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Distributed under the MIT License. See LICENSE.txt for more information.
- LHOUTELLIER Maël - Initial work - mlhoutel
