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 中
2,235 每月下载量
被 29 个 Crates 使用(其中 27 个直接使用)
1MB
12K SLoC
Kiss3d
简单至上,傻瓜式 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