#pixel #3d #canvas #graphics #2d-3d #2d

ferrux_viewport

简化在指定视图中绘制的抽象工具

3个版本

0.1.2 2022年4月11日
0.1.1 2022年4月11日
0.1.0 2022年4月8日

#329 in 渲染

MIT/Apache

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_linedraw_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