#plot #curve #bevy #graph #gamedev #game-engine #bevy-plugin

bevy_plot

一个用于绘制数据和显式函数的Bevy插件

2个版本

0.1.5 2022年2月19日
0.1.4 2022年2月18日

#458 in 可视化

MIT/Apache

5MB
4.5K SLoC

Rust 3.5K SLoC // 0.1% comments WebGPU Shader Language 843 SLoC // 0.1% comments

logo

Bevy游戏引擎的绘图库,注重美学和交互性。它可以处理数据点(见“最小化”、“标记”和“bevy”示例)和显式函数(见“func”、“animate”和“runtime_setter”示例)。显式函数使用二次贝塞尔插值进行渲染,从而平滑曲线。

以下是文档链接。

animate

如何开始

将“bevy_plot”添加到项目的Cargo.toml文件中的依赖项列表中,并查看示例,了解如何添加PlotPlugin、导入和使用Plot资产。

待办事项

  • 减少API模板代码
  • 交互式标记
  • 与3D摄像机的兼容性
  • 优化

lib.rs:

Bevy游戏引擎的绘图库。要快速开始,运行一个Bevy App,将PlotPlugin添加到App中,实例化一个Plot结构体,并使用以下方法:

前两种方法中的 my_data 参数必须实现 Plotable 特性(例如 Vec<Vec2>Vec<(f32, f32)>Vec<f32> 等)。在第三种情况下,my_function 是一个显式函数,它接受两个参数(x 和时间)并返回一个 f32

以下代码可以在 examples/minimal.rs 中找到。

 use bevy::prelude::*;
 use bevy_plot::*;
 
 fn main() {
     App::new()
         .add_plugins(DefaultPlugins)
         .add_plugin(PlotPlugin)
         .add_startup_system(setup)
         .run();
 }
 
 fn setup(mut commands: Commands, mut plots: ResMut<Assets<Plot>>) {
     commands.spawn_bundle(OrthographicCameraBundle::new_2d());
 
     let mut plot = Plot::default();
 
     let xs = (0..30).map(|i| i as f32 / 30.0).collect::<Vec<f32>>();
 
     let ys = xs
         .iter()
         .map(|x| Vec2::new(*x, 0.5 * x))
         .collect::<Vec<Vec2>>();
 
     plot.plot(ys);
 
     let plot_handle = plots.add(plot.clone());
     commands.spawn().insert(plot_handle);
 }

要自定义曲线和标记的外观,请参阅 Opt 枚举以及可用的选项,以及 Plot::plotoptPlot::plotopt_func 方法。要自定义画布(网格、颜色等),请参阅 Plot 字段。使用 Plot::set_bounds(lo, up) 方法设置 x 和 y 轴的范围,但 bevy_plot 在 lo.x > up.x 或 lo.y > up.y 时会引发 panic。

请注意,该库允许用户

  • 使用鼠标滚轮进行缩放和缩小,
  • 通过按住并拖动鼠标移动原点,
  • 通过按下鼠标中键来生成目标和相应的坐标,以及
  • 在运行时更改 Plot 字段(请参阅 examples/runtime_setter.rs)。

依赖关系

~45–60MB
~869K SLoC