3个版本
0.1.2 | 2022年4月11日 |
---|---|
0.1.1 | 2022年4月11日 |
0.1.0 | 2022年4月8日 |
#329 in 渲染
36KB
458 行
FerruX Viewport
FerruX Viewport是针对Pixels crate的抽象层,用于在3D空间中管理图形和实体的绘制。它管理像素缓冲区,并暴露简单的操作来在屏幕上绘制像素、线条和图形。在其当前状态下,它仅与Winit一起使用。
FerruX Viewport不执行透视投影,它仅管理已计算到归一化3D空间中的点的绘制
用法
构建一个视口
目前,提供的唯一视口是WinitCanvas(以及一个用于测试的模拟),它需要一个winit窗口,该窗口本身需要一个事件循环引用。
let event_loop = winit::event_loop::EventLoop::new();
let window = winit::window::Window::new(&event_loop)?;
let viewport = ferrux_viewport::viewport::ViewportFactory::winit(&window, 100)?;
运行视口
使用视口的推荐和主要流程是
- 使用绘图函数,如
draw_line
和draw_triangle
。 - 调用
render
方法将其打印到屏幕上。 - 使用
reset_frame
清除当前缓冲区并绘制新帧。
以下示例使用我们构建的Viewport
绘制一个变形线到三角形。
let mut i = 0.0;
let step = 0.05;
let mut incrementing = true;
event_loop.run(move |event, _, control_flow| {
match event {
Event::MainEventsCleared => {
i += if incrementing { step } else { -step };
if i >= 1.0 { incrementing = false } else if i <= 0.0 { incrementing = true }
window.request_redraw();
}
Event::RedrawRequested(_) => {
viewport.fill_triangle((0.0, 0.0, -0.1), (0.0 + i, -0.5 * i/2.0, -0.2), (0.0 + i, -0.3 * i/2.0, -0.2),
&[255, 0, 0, 255]);
viewport.render().expect("render failed");
viewport.reset_buffer();
}
_ => (),
}
示例
你可以使用以下命令运行当前示例
cargo run --package basic_example
关于
FerruX Viewport是在创建FerruXengine(一个我试图制作的3D图形引擎)的过程中开发的工具。我将这个视口作为对之前用于管理引擎(即FerruX Canvas)使用的Pixels缓冲区的工具的改进。
许可
根据您的选择,在以下之一下许可
- Apache License,版本2.0(LICENSE-APACHE)
- MIT许可(LICENSE-MIT)
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如Apache-2.0许可中定义的,应按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~9–24MB
~355K SLoC