#physics #bevy #weekend #check #world #matrix

app bitshifter/bevy-physics-weekend

用 bevy 在周末实现游戏物理

1 个不稳定版本

0.1.0 2021年3月3日

#393游戏

28 星 & 4 关注者

205KB
5K SLoC

周末游戏物理(用 Rust 实现)

Screenshot

本项目是使用 Game Physics in a Weekend 书籍、Rust 编程语言和 Bevy 游戏引擎的一个实现。

这是我为了更好地理解实现物理引擎、使用 Bevy 以及利用我的数学库 glam 而进行的学习练习。

请注意,本书和此代码仅供学习之用,它不是非常优化,也不打算用于生产。对于实际应用,请参阅 Rapierphysx-rs

我使用的是 Bevy 0.5.0 的一个分支,它使用来自 github 的最新版 glam。

模拟控制

  • T - 切换模拟暂停
  • Y - 暂停时执行模拟步骤
  • R - 重置模拟

相机控制

使用 Bevy Flycam 插件进行相机移动。

  • WASD - 向后、向前、向左和向右移动
  • 空格 - 向上移动
  • 左 Shift - 向下移动
  • Esc - 切换鼠标光标锁定

与书中不同的地方

坐标系

书中使用 Z 向上,而 Bevy 使用 Y 向上。这里我使用了 Bevy 的 Y 向上约定。

矩阵

书中使用行主序矩阵,而 glam 使用列向量和列主序矩阵。

架构

我尽量遵循书中的代码结构,但是有些东西在 Rust 中翻译得不是很好,所以一些代码的组织方式有所改变。

  • BodyHandle 被用来替代 Body* 指针。当前,这个句柄只是包装一个数组索引。
  • BodyConstraint 结构体由 BodyArenaConstraintArena 拥有,而不是由 PhysicsScene 拥有。这使得与借用检查器一起工作更加容易。

许可证

Creative Commons Zero v1.0 通用

依赖项

~29–72MB
~587K SLoC