Skip to content
This repository has been archived by the owner on Apr 15, 2024. It is now read-only.

kriogenia/ferrux_viewport

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FerruX Viewport

Ferrux Viewport is an abstraction layer over the Pixels crate to manage the drawing of figures and entities on a 3D space. It manages the pixel buffer exposing simple operations to draw pixels, lines and figures in the screen. In its current state it only works with Winit.

FerruX Viewport doesn't perform the pespective projection, it just manages the drawing of points already calculated into the normalized 3D space

Usage

Building a viewport

Right now, the only Viewport provided is WinitCanvas (and one mock for testing), which requires a winit Window, which will need itself an EventLoop reference.

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)?;

Running the viewport

The main and recommended flow to use the viewport is:

  • Use the drawing functions like draw_line and draw_triangle.
  • Call the render method to print it on screen.
  • Use reset_frame to clear the current buffer and draw a new frame.

The following example takes the Viewport we built and draws a morphing line into triangles.

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();
    }
    _ => (),
}

Examples

You can run the current example with

cargo run --package basic_example

About

The FerruX Viewport is a tool developed while creating the FerruXengine, an attempt of 3D graphics engine I was trying to make. I made this viewport as an improvement from my previous tool to manage the use of the Pixels buffer used by the engine (being that the FerruX Canvas).

License

Licensed, at your option, under either of:

  • Apache License, Version 2.0 (LICENSE-APACHE)
  • MIT license (LICENSE-MIT)

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Crate to ease the drawing of a screen in a viewport

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages