erincatto/box3d
GitHub: erincatto/box3d
Box3D 是一款专为游戏设计的轻量级跨平台三维刚体物理引擎,由 Box2D 作者开发,提供碰撞检测、刚体动力学求解与多种关节约束。
Stars: 5236 | Forks: 237
# Box3D
[](https://github.com/erincatto/box3d/actions)
[](https://cla-assistant.io/erincatto/box3d)

Box3D 是一款专为游戏设计的 3D 物理引擎。
[](https://www.youtube.com/watch?v=jr_Fzl2XwKU)
## 功能
### 碰撞
- 连续碰撞检测
- 接触事件
- 凸包、胶囊体、球体、三角网格和高度场
- 每个 body 支持多个 shape
- 碰撞过滤
- 射线投射、shape 投射和重叠查询
- Sensor 系统
- Character mover
### 物理系统
- 稳健的 _Soft Step_ 刚体求解器
- 针对快速平移和旋转的连续物理效果
- 基于 Island 的休眠机制
- 旋转、棱柱、距离、电机、焊接和车轮关节
- 关节限制、电机、弹簧和摩擦力
- 关节力和接触力
- Body 移动事件和休眠通知
### 系统
- 面向数据的设计
- 使用可移植的 C17 编写
- 广泛的多线程和 SIMD 支持
- 针对大量 body 堆叠进行了优化
- 跨平台确定性
- 录制与回放
### 示例
- 使用 sokol 在 Windows 上通过 D3D11 运行,在 macOS 上通过 Metal 运行,以及在 Linux 上通过 OpenGL 4.5 运行。
- 包含使用 imgui 构建的图形用户界面。
- 包含许多示例以展示功能和性能。
## 全平台构建
- 安装 [CMake](https://cmake.org/)
- 安装 [git](https://git-scm.com/)
- 确保它们可以在命令行中运行
## 使用 CMake presets 构建(推荐)
此方式使用 `CMakePresets.json` 中的预设。
- Windows: `cmake --preset windows` 然后 `cmake --build --preset windows-release`
- Linux: `cmake --preset linux-release` 然后 `cmake --build --preset linux-release`
- macOS: `cmake --preset macos` 然后 `cmake --build --preset macos-release`
运行示例应用(必须在 Box3D 目录下执行)。
- Windows: `.\build\bin\Release\samples.exe`
- Linux: `./build/bin/samples`
- macOS: `./build/bin/Release/samples`
## 为 Visual Studio 构建
- 安装 [Visual Studio](https://visualstudio.microsoft.com/)
- 运行 `build_vs2026.bat`
- 打开并编译 `build/box3d.slnx`
## 为 Linux 构建
- 在 bash shell 中运行 `build.sh`
- 结果将输出在 build 子文件夹中
## 为 Xcode 构建
- mkdir build
- cd build
- cmake -G Xcode ..
- 打开 `box3d.xcodeproj`
- 选择 samples scheme
- 构建并运行 samples
## 为 Web 构建
- [Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html)
- `emcmake cmake -B build -DBOX3D_SAMPLES=OFF`
- `cmake --build build`
Box3D 在 WebAssembly 中使用 SSE2。可以定义 `BOX3D_DISABLE_SIMD` 来禁用 SSE2。
## 构建和安装
- mkdir build
- cd build
- cmake ..
- cmake --build . --config Release
- cmake --install . (可能需要 sudo 权限)
## 在你的项目中使用 Box3D
核心库除了 C runtime(以及 Unix 上的 `libm`)之外没有其他依赖。链接它
将为你提供 `box3d::box3d` 目标。
我推荐使用 FetchContent:
```
include(FetchContent)
FetchContent_Declare(box3d
GIT_REPOSITORY https://github.com/erincatto/box3d.git
GIT_TAG v0.1.0)
FetchContent_MakeAvailable(box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
```
对于作为第三方副本或 git submodule 的拷贝,请将 `add_subdirectory` 指向它:
```
add_subdirectory(extern/box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
```
若要使用通过 `cmake --install` 安装的拷贝,请查找该 package:
```
find_package(box3d 0.1 REQUIRED)
target_link_libraries(my_app PRIVATE box3d::box3d)
```
请参阅 [`docs/hello.md`](docs/hello.md) 获取一个最简的初始程序。
## 兼容性
Box3D 库和示例可以在 Windows、Linux 和 Mac 上构建和运行。
你需要一个支持 C17 的编译器来构建 Box3D 库。
你需要一个支持 C++20 的编译器来构建示例。
Box3D 使用 SSE2 和 Neon SIMD 数学计算来提升性能。可以通过定义 `BOX3D_DISABLE_SIMD` 来禁用 SIMD。
## 文档
用户手册位于 [`docs/`](docs/) 中,并使用 Doxygen 构建。启用 `BOX3D_DOCS` CMake 选项并构建 `doc` 目标即可。
## 反馈
请在 discord 上提交 issue 或发起讨论。你也可以使用 [GitHub Discussions](https://github.com/erincatto/box3d/discussions)。
## 许可证
Box3D 由 Erin Catto 开发,并使用 [MIT 许可证](https://en.wikipedia.org/wiki/MIT_License)。
## LLM 使用情况
LLMs 被应用于以下领域:
- 单元测试
- 示例应用
- 在 Box2D 和 Box3D 之间迁移代码
- 构建配置
- 代码审查
- 性能基准测试
在其他方面,所有代码均由我开发和编写。我对 Box2D/3D 中的每一行代码负责。
标签:3D物理引擎, AI工具, Bash脚本, 刚体动力学, 客户端加密, 游戏开发, 碰撞检测