Duku Renderer 🎨

Version Docs Build Status Rust Version License
Simple Example • Usage • Features


This Rust crate makes it easy to render 2D and 3D graphics.

Simple Example

A simple example that initiates duku, sets up a 3D camera and draws a cube on the screen.

```rust use duku::Color; use duku::Camera; use duku::Duku; use duku::Result;

fn main() -> Result<()> { // initialize duku and OS window with a size of 500x500 let (mut duku, window) = Duku::builder().build_window(500, 500).build()?;

// create a 3D perspective camera with an FOV of 90
let mut camera = Camera::perspective_autosized(90);

// move the camera to some location
// and make it look at the center of the world
camera.transform.move_by([2.0, 1.5, -2.0]);
camera.transform.look_at([0.0, 0.0, 0.0]);

// start up the main event loop
window.main_loop(move |_| {
  // start drawing on the window using our camera
  duku.draw_on_window(Some(&camera), |target| {
        // set the background color to sky blue
        target.clear = Color::SKY_BLUE;

        // draw a cube at the center of the world
        target.draw_cube();
    });
});

Ok(())

} ```

This example uses the optional feature window for OS window creation.

Want more? Check out these other [examples].


Usage

To use this crate, add this dependency to your Cargo.toml file.

toml [dependencies] duku = "0.1.0"


Features

Optional Features

This crate supports additional optional features that you can add to your dependency in your Cargo.toml file.

toml [dependencies] duku = { ... , features = ["feature-name"] }

The optional features include:

| Name | Uses | Description | | -------- | -------------- | ------------------------------------- | | window | [winit] | adds OS window creation support | | png | [png] | adds png file loading support | | jpeg | [jpeg-decoder] | adds jpeg file loading support | | gltf | [gltf] | adds gltf file loading support | | glsl | [shaderc] | adds custom glsl file loading support | | log | n/a | adds informational logs |