>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C

Erin Catto 将传奇 Box2D 物理引擎带入 3D 世界

如果你曾经对 2D 游戏开发感兴趣,那么一定听说过 Box2D。《愤怒的小鸟》、《地狱边境》等数百个项目都构建在这个引擎之上。近日,其创始人 Erin Catto 发布了新项目——Box3D。这是一个从零开始用 C 编写的刚体 3D 物理库。

Box3D Logo

Box3D 是什么

该库采用可移植的 C17 编写,除了标准 C 库外没有任何外部依赖。项目附带的示例使用 C++20 编写,配合 sokol 图形后端和 Dear ImGui 界面。演示应用程序可以在 Windows、macOS 和 Linux 上顺利构建,并且可以通过 WebAssembly 在浏览器中直接运行物理模拟。

Box3D Video

与臃肿的商业替代方案不同,Box3D 专注于纯性能、数据导向的设计和可预测性。

主要特性

向量计算与性能

物理引擎核心充分利用了 x86 处理器的 SSE2 向量指令和 ARM 的 Neon 指令。如果你正在为没有 SIMD 支持的 exotic 平台或微控制器构建项目,可以通过 BOX3D_DISABLE_SIMD 宏定义禁用向量数学计算。

Soft Step 求解器与关节类型

Soft Step 算法处理刚体行为。引擎支持凸包、胶囊、球体、多边形网格和高度场。多个形状可以附加到单个刚体上。

支持的关节类型包括:

  • 铰链和滑块
  • 距离约束和电机
  • 焊接关节和轮毂关节
  • 可配置的限位、弹簧和摩擦

为了节省资源,系统使用了岛屿睡眠机制:如果一组物体停止运动,引擎会暂时将其排除在计算之外。

确定性与模拟录制

物理世界计算的结果在不同平台上保持一致。这对于网络多人游戏至关重要。开箱即用的模拟录制和回放功能简化了物理 bug 的调试。

连续碰撞检测

得益于完整的连续碰撞检测(CCD)系统,快速移动的物体不会穿墙而过。算法同时处理快速线性运动和旋转。

如何集成到项目中

通过 FetchContent 将 Box3D 集成到 CMake 项目中只需要几分钟:

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)

如果你更喜欢将第三方代码保持在本地,标准的 add_subdirectory 方式同样适用:

add_subdirectory(extern/box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

关于 AI 在开发中的坦诚对话

README 中有一个有趣的细节——作者坦诚描述了神经网络在创建该库中的作用。Erin Catto 明确表示,他使用 LLM 生成单元测试、配置 CMake、从 Box2D 迁移代码、编写基准测试和代码审查。然而,所有物理引擎逻辑都是他自己编写的,并对每一行代码承担个人责任。

适用人群

如果你正在用 C 或 C++ 编写自己的 3D 引擎,并且一直在寻找一个紧凑的物理库——不需要大量的图形或引擎开销——Box3D 值得仔细研究。该项目处于 0.1.0 发布阶段,目前关闭了 pull requests,仅接受 issues,但源代码采用 MIT 许可证开放,且非常易于阅读。

相关项目