3 个不稳定版本
0.2.1 | 2020 年 12 月 9 日 |
---|---|
0.2.0 | 2020 年 12 月 5 日 |
0.1.0 | 2020 年 11 月 24 日 |
#254 in 图形 API
25 每月下载次数
2.5MB
21K SLoC
包含 (ELF 库, 1.5MB) vulkan/libvulkan.so, (静态库, 53KB) vulkan/vulkan.lib
一个专注于易用性和新手友好的 Rust 包,用于创建图形体验。学习 Rust 时,也有助于可视化算法。
这个创意编码库从 p5.js 中汲取了许多灵感。
简单示例
此示例在窗口中心绘制一个立方体,并根据经过的时间进行旋转和着色。
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 | 添加信息日志 |
文档
依赖项
~0–7MB
~144K SLoC