48 个版本 (破坏性更新)

0.35.0 2022 年 7 月 15 日
0.34.0 2022 年 3 月 18 日
0.33.0 2022 年 1 月 30 日
0.32.0 2021 年 11 月 12 日
0.1.0 2014 年 11 月 22 日

#58图形 API

Download history 632/week @ 2024-03-13 621/week @ 2024-03-20 510/week @ 2024-03-27 696/week @ 2024-04-03 596/week @ 2024-04-10 693/week @ 2024-04-17 675/week @ 2024-04-24 555/week @ 2024-05-01 585/week @ 2024-05-08 561/week @ 2024-05-15 566/week @ 2024-05-22 695/week @ 2024-05-29 521/week @ 2024-06-05 551/week @ 2024-06-12 670/week @ 2024-06-19 407/week @ 2024-06-26

2,235 每月下载量
29 个 Crates 使用(其中 27 个直接使用)

BSD-3-Clause

1MB
12K SLoC

Kiss3d

Crates.io Docs License

简单至上,傻瓜式 3D 图形引擎。

这个库源于对当前 3D 图形库的挫败感,它们要么是

  • 太低级:你必须自己编写着色器,打开窗口需要 8 小时,300 行代码和 10L 咖啡。
  • 高级,但 太难理解和使用:这些库是为了创建美丽的照片级(或接近)动画或游戏而设计的。它们有很多特性;实际上太多,如果你只是想在屏幕上尽可能少地摩擦地绘制几个对象。

kiss3d 并不是设计成功能完备或快速的。它设计成让你尽可能少地摩擦地绘制简单的几何图形并与它们互动。

功能

  • 兼容 WASM。
  • 默认情况下,带有默认的弧形球相机和点光源打开窗口。
  • 还有第一人称相机,也可以定义用户自定义的相机。
  • 简单地渲染盒子、球体、圆锥体、圆柱体、四边形和线条
  • 更改对象的颜色或纹理。
  • 更改对象的变换(我们使用 nalgebra 来实现)。
  • 创建基本的后期处理效果。

例如,创建一个带有红色旋转立方体和连接到相机的光源的场景,就像这样(注意:当针对 WASM 时,这将 无法编译

extern crate kiss3d;

use kiss3d::nalgebra::{Vector3, UnitQuaternion};
use kiss3d::window::Window;
use kiss3d::light::Light;

fn main() {
    let mut window = Window::new("Kiss3d: cube");
    let mut c      = window.add_cube(1.0, 1.0, 1.0);

    c.set_color(1.0, 0.0, 0.0);

    window.set_light(Light::StickToCamera);

    let rot = UnitQuaternion::from_axis_angle(&Vector3::y_axis(), 0.014);

    while window.render() {
        c.prepend_to_local_rotation(&rot);
    }
}

使相同的示例同时兼容 WASM 和原生平台稍微复杂一些,因为 kiss3d 必须控制渲染循环

extern crate kiss3d;

use kiss3d::light::Light;
use kiss3d::scene::SceneNode;
use kiss3d::window::{State, Window};
use kiss3d::nalgebra::{UnitQuaternion, Vector3};

struct AppState {
    c: SceneNode,
    rot: UnitQuaternion<f32>,
}

impl State for AppState {
    fn step(&mut self, _: &mut Window) {
        self.c.prepend_to_local_rotation(&self.rot)
    }
}

fn main() {
    let mut window = Window::new("Kiss3d: wasm example");
    let mut c = window.add_cube(1.0, 1.0, 1.0);

    c.set_color(1.0, 0.0, 0.0);

    window.set_light(Light::StickToCamera);

    let rot = UnitQuaternion::from_axis_angle(&Vector3::y_axis(), 0.014);
    let state = AppState { c, rot };

    window.render_loop(state)
}

一些控制默认由引擎处理(用户可以覆盖它们)

  • scroll:放大/缩小。
  • 左键点击 + 拖动:四处查看。
  • 右键点击 + 拖动:平移视点。
  • enter:查看原点(0.0, 0.0, 0.0)。

编译

您需要最新的稳定版本的 rust 编译器 和官方包管理器: cargo

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

[dependencies]
kiss3d = "0.32"

注意:如果您的项目已经使用了 nalgebra,则需要与 kiss3d 使用的相同版本,否则可能会遇到兼容性问题。

贡献

我非常愿意看到人们根据自己的需求改进这个库。然而,请记住,kiss3d 是 KISS(Keep It Simple, Stupid)。用户视角下的一行代码特性更受欢迎。

致谢

感谢所有 Rustaceans 的帮助和他们的 OpenGL 绑定。

依赖关系

~26MB
~322K SLoC