1 个不稳定版本
0.1.0 | 2021年3月3日 |
---|
#393 在 游戏
28 星 & 4 关注者
205KB
5K SLoC
周末游戏物理(用 Rust 实现)
本项目是使用 Game Physics in a Weekend 书籍、Rust 编程语言和 Bevy 游戏引擎的一个实现。
这是我为了更好地理解实现物理引擎、使用 Bevy 以及利用我的数学库 glam 而进行的学习练习。
请注意,本书和此代码仅供学习之用,它不是非常优化,也不打算用于生产。对于实际应用,请参阅 Rapier 或 physx-rs。
我使用的是 Bevy 0.5.0 的一个分支,它使用来自 github 的最新版 glam。
模拟控制
- T - 切换模拟暂停
- Y - 暂停时执行模拟步骤
- R - 重置模拟
相机控制
使用 Bevy Flycam 插件进行相机移动。
- WASD - 向后、向前、向左和向右移动
- 空格 - 向上移动
- 左 Shift - 向下移动
- Esc - 切换鼠标光标锁定
与书中不同的地方
坐标系
书中使用 Z 向上,而 Bevy 使用 Y 向上。这里我使用了 Bevy 的 Y 向上约定。
矩阵
书中使用行主序矩阵,而 glam
使用列向量和列主序矩阵。
架构
我尽量遵循书中的代码结构,但是有些东西在 Rust 中翻译得不是很好,所以一些代码的组织方式有所改变。
BodyHandle
被用来替代Body*
指针。当前,这个句柄只是包装一个数组索引。Body
和Constraint
结构体由BodyArena
和ConstraintArena
拥有,而不是由PhysicsScene
拥有。这使得与借用检查器一起工作更加容易。
许可证
依赖项
~29–72MB
~587K SLoC