4个版本
0.3.1 | 2023年3月11日 |
---|---|
0.3.0 | 2021年8月3日 |
0.2.1 | 2021年2月19日 |
0.2.0 | 2021年2月17日 |
#115 在 渲染
63 每月下载量
3.5MB
9K SLoC
flo_draw = "0.3"
flo_draw
如果您想在Rust中将一些2D图形立即渲染到屏幕上,而不必处理在UI框架中设置图形上下文的常规繁琐事务,那么您需要的就是flo_draw
这个crate。
flo_draw
还附带了一套强大的2D图形库,并具有灵活的基于流的API,可以轻松完成许多其他库可能需要大量工作的任务。
动机
在构建FlowBetween时,我发现我需要一些用于渲染图形的工具:一个平台无关的API以及一种可以渲染位图文件而不依赖于任何特定平台的方法。在调试过程中,我发现我非常想要一个简单的方法来弹出一个窗口并在其中绘制图形。这在20世纪80年代非常简单(如截图所示),但随着GUI和3D加速的发展,图形渲染变得越来越困难。
flo_draw
将专为FlowBetween创建的2D图形crate添加了一个API,以简化使它们工作所需的所有繁琐任务。
基本示例
这是一个简单示例,将打开一个包含三角形的窗口
use flo_draw::*;
use flo_canvas::*;
pub fn main() {
with_2d_graphics(|| {
let canvas = create_canvas_window();
canvas.draw(|gc| {
gc.clear_canvas(Color::Rgba(0.0, 0.0, 0.0, 1.0));
gc.canvas_height(1000.0);
gc.center_region(0.0, 0.0, 1000.0, 1000.0);
// Draw a rectangle...
gc.new_path();
gc.move_to(0.0, 0.0);
gc.line_to(1000.0, 0.0);
gc.line_to(1000.0, 1000.0);
gc.line_to(0.0, 1000.0);
gc.line_to(0.0, 0.0);
gc.fill_color(Color::Rgba(1.0, 1.0, 0.8, 1.0));
gc.fill();
// Draw a triangle on top
gc.new_path();
gc.move_to(200.0, 200.0);
gc.line_to(800.0, 200.0);
gc.line_to(500.0, 800.0);
gc.line_to(200.0, 200.0);
gc.fill_color(Color::Rgba(0.0, 0.0, 0.8, 1.0));
gc.fill();
});
});
}
cargo run --example canvas_window
- 显示基本窗口cargo run --example hello_world
- 传统方法cargo run --example bounce_sprites
- 动画弹跳球cargo run --example follow_mouse
- 通过跟踪鼠标展示事件处理cargo run --example vectoroids
- 事件处理的高级示例,包含一个不完整的游戏(使用箭头键移动,空格键射击)cargo run --example png_triangle
- 将三角形渲染到png文件cargo run --example mandelbrot
- 交互式的曼德布罗特集程序cargo run --example wibble
- 将文本渲染为矢量并实时扭曲cargo run --example mascot
- 使用预编码矢量指令渲染FlowBetween的吉祥物cargo run --example texture
- 位图渲染cargo run --example texture_sprites
- 使用位图图像的弹跳球cargo run --example texture_spin
- 带有动画变换的位图渲染cargo run --example gradient
- 渐变渲染cargo run --example mascot_shadow
- 重新处理吉祥物渲染以添加额外的阴影cargo run --example wibble_mascot
- 重新处理吉祥物渲染使其摇摆cargo run --example text_layout
- 文本布局引擎可以实现的某些效果cargo run --example show_tessellation
- 展示如何使用GPU对2D图形进行细分以进行显示(以及如何手动执行此操作并拦截结果)cargo run --example show_text_tessellation
- 从字体中渲染的文本的细分
--
依赖项
~36MB
~562K SLoC