erincatto/box3d

GitHub: erincatto/box3d

Box3D 是一款专为游戏设计的轻量级跨平台三维刚体物理引擎,由 Box2D 作者开发,提供碰撞检测、刚体动力学求解与多种关节约束。

Stars: 5236 | Forks: 237

# Box3D [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/05d529c3c12fceb82bbb342132576a3ea559c48cdc8c72256a0c1f432e7ce117.svg)](https://github.com/erincatto/box3d/actions) [![CLA assistant](https://cla-assistant.io/readme/badge/erincatto/box3d)](https://cla-assistant.io/erincatto/box3d) ![Box3D Logo](https://box2d.org/images/logo.svg) Box3D 是一款专为游戏设计的 3D 物理引擎。 [![Box3D 介绍](https://img.youtube.com/vi/jr_Fzl2XwKU/maxresdefault.jpg)](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脚本, 刚体动力学, 客户端加密, 游戏开发, 碰撞检测