kiss3d:简单易用的3D/2D图形引擎,快速绘制几何图形,跨平台支持

Keep it simple, stupid 3d graphics engine for Rust.

分支24Tags42
文件最后提交记录最后更新时间
10 个月前
1 个月前
1 个月前
7 个月前
18 天前
10 个月前
18 天前
1 个月前
7 个月前
3 个月前
2 个月前
12 年前
1 个月前
18 天前
12 年前
7 个月前
1 个月前
4 年前

crates.io
Build status crates.io

简洁至上的 3D 与 2D 图形引擎。

开发这个库的初衷,源于我们对当下 3D 图形库现状的不满,它们往往要么:

  • 过于底层:你得自己编写着色器,而打开一个窗口就可能耗费 8 小时、300 行代码,外加 10 升咖啡。
  • 虽为高层库,但难以理解和使用:这类库旨在创建精美的逼真(或接近逼真)动画或游戏。它们功能繁多,但若你只是想在屏幕上绘制几个简单物体,力求顺畅无阻,这些功能就显得冗余了。

kiss3d 并非为追求功能全面或极致性能而设计。它的目标是让你能以最小的阻力绘制简单的几何图形并进行交互。

特性

  • 兼容 WASM。
  • 开箱即用,自动打开一个窗口,内置默认的弧球相机和点光源。
  • 同时提供第一人称相机,也支持自定义相机。
  • 轻松渲染立方体、球体、锥体、圆柱体、四边形和线条。
  • 可更改物体的颜色或纹理。
  • 可更改物体的变换。
  • 可创建基本的后期处理效果。

例如,创建一个场景,其中包含一个旋转的红色立方体,并且相机附带一个光源,代码可以简单到如下所示:

use kiss3d::prelude::*;

#[kiss3d::main]
async fn main() {
  let mut window = Window::new("Kiss3d: cube").await;
  let mut camera = OrbitCamera3d::default();
  let mut scene = SceneNode3d::empty();
  scene
          .add_light(Light::point(100.0))
          .set_position(Vec3::new(0.0, 2.0, -2.0));

  let mut c = scene.add_cube(1.0, 1.0, 1.0).set_color(RED);

  let rot = Quat::from_axis_angle(Vec3::Y, 0.014);

  while window.render_3d(&mut scene, &mut camera).await {
    c.rotate(rot);
  }
}

此代码无需任何修改,即可在原生平台和 WASM 上运行!#[kiss3d::main] 宏和 async 渲染 API 会自动处理平台差异:

  • 在原生平台上:异步运行时通过 pollster::block_on 进行管理
  • 在 WASM 上:异步函数通过 requestAnimationFrame 与浏览器的事件循环集成

这种方法无需编写特定平台代码或管理不同的入口点,让编写真正跨平台的 3D 应用变得简单。

引擎默认处理一些控制操作(用户可以覆盖这些操作):

  • 滚动:放大 / 缩小。
  • 左键点击 + 拖动:环顾四周。
  • 右键点击 + 拖动:平移视点。
  • Enter:看向原点 (0.0, 0.0, 0.0)。

编译

您需要 rust compiler 的最新稳定版本以及官方包管理器:cargo

只需将以下内容添加到您的 Cargo.toml 文件中:

[dependencies]
kiss3d = "0.37"

可选功能

录制

Kiss3d 支持将您的 3D 场景录制为 MP4 视频文件。此功能需要在您的系统上安装 FFmpeg。

安装 FFmpeg:

  • macOS:brew install ffmpeg
  • Ubuntu/Debian:sudo apt install ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
  • Windows:从 ffmpeg.org 下载并添加到 PATH

在您的 Cargo.toml 中启用该功能:

[dependencies]
kiss3d = { version = "0.40", features = ["recording"] }

Egui 集成

若需支持即时模式 GUI,请启用 egui 功能:

[dependencies]
kiss3d = { version = "0.40", features = ["egui"] }

项目介绍

保持简单,适用于Rust的傻瓜式3D图形引擎。【此简介由AI生成】

定制我的领域
291.75 K192访问 GitHub