bevy_prototype_lyon · rparrett/bevy_prototype_lyon
一个用 Rust 编写的 Bevy 插件,用于绘制三角形、圆形、矩形、线段、圆弧和贝塞尔曲线等 2D 形状与路径。据 README 说明,它通过 lyon 生成自定义网格,并以 Bevy 的 Mesh2d 变体完成渲染,以弥补 Bevy 目前不便于直接绘制自定义形状的不...
bevy_prototype_lyon 是一个面向 Bevy 引擎的 Rust 插件,目标是让 Bevy 用户能够直接绘制 2D 形状与路径。根据 README 的说明,它可以绘制三角形、圆形、矩形、线段、圆弧(arcs)以及贝塞尔曲线(beziers)等图形,填补了 Bevy 在「便捷绘制自定义形状」方面的空白。
项目的标题相当直白——「Bevy + Lyon = ❤」,即把 Bevy 的渲染体系与 lyon 的几何三角剖分能力组合起来。README 顶部提供了 crates.io 版本、许可证、下载量、GitHub Stars 与 CI 状态徽章,并附有一个在线演示链接和一张正多边形示例图。
需要说明的是,本仓库的名称带有 prototype 字样,且 README 未对其稳定性、性能表现作出任何承诺;本文内容均以 README 中明确写出的信息为准。
README 用一节「How does it work?」解释了实现思路:
Mesh2d 的一种变体,配合自定义网格来绘制形状;lyon_tessellation 文档)。也就是说,bevy_prototype_lyon 本身并不实现一套独立的 2D 光栅化或 GPU 渲染管线,而是承担「形状描述 → 网格数据 → Bevy 网格组件」这一层的转换工作,最终仍交给 Bevy 既有的 2D 渲染路径完成绘制。
README 给出了最小可运行的使用流程。第一步是把依赖加入 Cargo 项目:
cargo add bevy_prototype_lyon
第二步是在 App 中注册 ShapePlugin,随后即可通过 ShapeBuilder 构造带填充与描边的形状。README 中的示例创建了一个六边形正多边形(shapes::RegularPolygon,通过 RegularPolygonFeature::Radius(200.0) 指定半径),并使用深青色填充(DARK_CYAN)与 10 像素宽的黑色描边(stroke((BLACK, 10.0))):
fn setup_system(mut commands: Commands) {
let shape = shapes::RegularPolygon {
sides: 6,
feature: shapes::RegularPolygonFeature::Radius(200.0),
..shapes::RegularPolygon::default()
};
commands.spawn((Camera2d, Msaa::Sample4));
commands.spawn(
ShapeBuilder::with(&shape)
.fill(DARK_CYAN)
.stroke((BLACK, 10.0))
.build(),
);
}
从示例可以看到几个关键用法要点:
DefaultPlugins 与 ShapePlugin;shapes::* 结构体)的形式定义,再交由 ShapeBuilder 组装;ShapeBuilder 提供 fill 与 stroke 两类外观设置,其中描边接受「颜色 + 宽度」形式的元组;commands.spawn 作为实体生成,符合 Bevy 的 ECS 使用习惯;Camera2d 并设置了 Msaa::Sample4 抗锯齿采样。README 明确建议读者进一步查看仓库 examples 目录下的示例来了解更多用法,但没有在正文中逐一列举 API。
README 中的「Bevy versions supported」一节说明了维护策略:作者尽量支持 Bevy 的最新版本,一旦 Bevy 发布新版本,对旧版本的支持即被放弃(即只保留与最新 Bevy 对应的一版插件)。README 附有对照表,例如:
| bevy | bevy_prototype_lyon | 许可证 |
|---|---|---|
| 0.20 | 0.18 | MIT/Apache 2.0 |
| 0.19 | 0.17 | MIT/Apache 2.0 |
| 0.18 | 0.16 | MIT/Apache 2.0 |
| 0.17 | 0.15 | MIT/Apache 2.0 |
| 0.16 | 0.14 | MIT/Apache 2.0 |
| 0.15 | 0.13 | MIT/Apache 2.0 |
| 0.14 | 0.12 | MIT/Apache 2.0 |
| 0.5 | 0.3 | MIT |
由此可知:插件版本号与 Bevy 版本号并不同步,接入项目时需要按表格选择匹配的组合;较早期(Bevy 0.5 及以前)的许可证为单一 MIT,之后改为 MIT/Apache 2.0 双许可。
nilirad.github.io 上的 showcase 页面,可直接在浏览器中体验形状绘制效果。docs 目录下有一张正多边形演示图(polygon_demo.webp)。examples 目录,README 建议读者前往查看。结合 README 信息,这个项目更适合已经对 Bevy 有基本认识、并希望补上「程序化 2D 图形绘制」能力的 Rust 开发者:
ShapePlugin 的注册位置、ShapeBuilder 的链式调用以及 fill / stroke 的区别。examples 目录中的示例,理解 README 提到的各类形状(三角形、圆形、矩形、线段、圆弧、贝塞尔曲线)的具体构造方式。lyon_tessellation 文档,理解网格是如何由几何路径生成的。需要注意,README 未涉及性能基准、动画、物理或交互等内容,上述方向需自行探索验证。
jfduke3d 是 JonoF 对 3D Realms《Duke Nukem 3D》的源码移植,基于其 Build...