3 个不稳定版本

0.2.1 2020 年 12 月 9 日
0.2.0 2020 年 12 月 5 日
0.1.0 2020 年 11 月 24 日

#254 in 图形 API

25 每月下载次数

Apache-2.0

2.5MB
21K SLoC

包含 (ELF 库, 1.5MB) vulkan/libvulkan.so, (静态库, 53KB) vulkan/vulkan.lib

duku

简单示例使用方法特性文档

Build Status Version Rust Version License

一个专注于易用性和新手友好的 Rust 包,用于创建图形体验。学习 Rust 时,也有助于可视化算法。

这个创意编码库从 p5.js 中汲取了许多灵感。

简单示例

此示例在窗口中心绘制一个立方体,并根据经过的时间进行旋转和着色。

rotating_cube.gif

use duku::Camera;
use duku::Duku;
use duku::Hsb;
use duku::Light;
use duku::Result;
use std::time::Instant;

fn main() -> Result<()> {
  // create duku context and window
  let (mut duku, window) = Duku::windowed(500, 500)?;

  // create 3D camera with 90 fov
  let camera = Camera::perspective(90);

  // create directional light
  let light = Light::directional("#ffffff", [-1.0, -1.0, 1.0]);

  // start timer for rotation and color
  let timer = Instant::now();

  // start window loop
  window.while_open(move |_| {
      // start drawing on window
      duku.draw(Some(&camera), |t| {
          // setup scene
          t.background("#ababab");
          t.light(light);

          // get elapsed time since start
          let elapsed = timer.elapsed().as_secs_f32();

          // transform scene
          let angle = elapsed * 45.0;
          t.rotate_x(angle);
          t.rotate_y(angle);
          t.translate_z(2.0);

          // draw cube
          let hue = (elapsed * 60.0) as u16;
          t.tint(Hsb::new(hue, 70, 80));
          t.cube([1.0, 1.0, 1.0]);
      });
  });

  Ok(())
}

使用方法

要使用此包,请将以下依赖项添加到您的 Cargo.toml 文件中。

[dependencies]
duku = "0.2.1"

特性

  • 支持 - Windows 和 Linux X11
  • Vulkan - 使用 Vulkan SDK
  • 3D - 使用材质和着色器进行网格渲染
  • 2D - 使用批处理进行形状、纹理和文本渲染
  • PBR - 使用 PBR 材质/着色器系统
  • 阴影 - 使用 PCF 阴影贴图
  • 文本 - 使用 Fira Mono 或其他 OTF/TTF 字体
  • 着色器 - 使用自定义 glsl 着色器

此包支持您可以在 Cargo.toml 文件中添加到依赖项的附加功能。

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

包括以下功能

名称 默认 用途 描述
window yes winit 添加操作系统窗口创建支持
png no png 添加 png 文件加载支持
jpeg no jpeg-decoder 添加 jpeg 文件加载支持
gltf no gltf 添加 gltf 文件加载支持
glsl no shaderc 添加自定义 glsl 文件加载支持
otf no ab_glyph 添加 otf/ttf 文件加载支持
log no n/a 添加信息日志

文档

crate 文档可以在这里找到,关于着色器编译的文档可以在这里找到。关于如何使用此crate的注释示例可以在这里找到。

依赖项

~0–7MB
~144K SLoC