
# Box2D
**Box2D is a 2D physics engine for games.**
For help with Box2D, please visit http://www.box2d.org. There is a forum there where you may post your questions.
Please see `Building.txt` to learn how to build Box2D and run the testbed.
## Demos
To run the demos, set `Testbed` as your startup project and press F5. Some test bed commands are:
- r to reset the current test
- SPACE to launch a bomb
- ← → keys to pan
- x and z to zoom in/out
- use the mouse to click and drag objects
## Contributing
Please do not submit pull requests with new features. Instead, please file an issue first for discussion. For bugs, I prefer detailed bug reports over pull requests.
## Features
### Collision
- Continuous collision detection
- Contact callbacks: begin, end, pre-solve, post-solve
- Convex polygons and circles
- Multiple shapes per body
- One-shot contact manifolds
- Dynamic tree broadphase
- Efficient pair management
- Fast broadphase AABB queries
- Collision groups and categories
### Physics
- Continuous physics with time of impact solver
- Persistent body-joint-contact graph
- Island solution and sleep management
- Contact, friction, and restitution
- Stable stacking with a linear-time solver
- Revolute, prismatic, distance, pulley, gear, mouse joint, and other joint types
- Joint limits, motors, and friction
- Momentum decoupled position correction
- Fairly accurate reaction forces/impulses
### System
- Small block and stack allocators
- Centralized tuning parameters
- Highly portable C++ with no use of STL containers
### Testbed
- OpenGL with GLFW
- Graphical user interface with imgui
- Easily switch between tests using GUI
- Test framework for easily adding new tests
- Mouse picking and the bomb!
- CMake build system files
### Documentation
- User manual
- Doxygen document with code comments
- Active user forum
## License
Box2D is developed by Erin Catto, and has the [zlib license](http://en.wikipedia.org/wiki/Zlib_License). While the zlib license does not require acknowledgement, we encourage you to give credit to Box2D in your product.