10个版本
0.2.7 | 2023年4月16日 |
---|---|
0.2.6 | 2023年4月5日 |
0.2.4 | 2023年1月9日 |
0.2.3 | 2021年4月19日 |
0.1.3 | 2020年11月24日 |
#58 在 渲染
84 每月下载量
用于 2 crates
2.5MB
3.5K SLoC
多面体算子
此crate实现了康威多面体算子及其扩展,由George W. Hart和其他人实现。
一些粗野主义多面体;由3Delight|ɴsɪ渲染并在Darktable中后期处理。
这是一个为了提高我对Rust中迭代器的理解而进行的实验。它基于Kit Wallace的OpenSCAD代码。由于OpenSCAD语言是函数式的,因此它非常适合转换为函数式的Rust。
use polyhedron_ops::Polyhedron;
use std::path::Path;
// Conway notation: gapcD
let polyhedron =
Polyhedron::dodecahedron() // D
.chamfer(None, true) // c
.propellor(None, true) // p
.ambo(None, true) // a
.gyro(None, None, true) // g
.finalize();
// Export as ./polyhedron-gapcD.obj
polyhedron.write_to_obj(&Path::new("."), false);
上面的代码从一个十二面体开始,并迭代地应用四个算子。
产生的形状如下所示。
警告
这处于半抛光状态。文档可能不够好(如果您觉得某处特别缺乏,请提出问题)。
简而言之:风险自担。
Cargo特性
-
nsi
– 通过ɴsɪ crate将多面体发送到离线渲染器的支持。 -
obj
– 添加将数据输出为Wavefront OBJ的支持。 -
parser
– 增加对康威多面体符号中字符串解析的支持。该功能实现了Polyhedron::TryFrom<&str>
。
基本形状
- 柏拉图立体
- 棱柱
- 反棱柱
- 金字塔
- 约翰逊多面体
支持的运算符
- a – ambo
- b – bevel(等同于ta)
- c – chamfer
- d – dual
- e – expand(又称explode,等同于aa)
- g – gyro
- i – inset/loft(等同于x,N)
- j – join(等同于dad)
- K – 快速而简单的规范化
- k – kis
- M – medial(等同于dta)
- m – meta(等同于k,,3j)
- n – needle(等同于dt)
- o – ortho(等同于jj)
- p – propellor
- q – quinto
- r – reflect
- S – spherize
- s – snub(等同于dgd)
- t – truncate(等同于dkd)
- v – subdivide(Catmull-Clark)
- w – whirl
- x – extrude
- z – zip(等同于dk)
其他运算符
- H – hollow(在Wings3D中称为‘intrude’)
- h – hexpropellor
- l – stellate
- ? – triangulate
游戏
有一个游乐场示例应用程序来测试东西并享受乐趣。
cargo run --release --example playground --features obj
如果您想生成上面的图像,您需要下载3Delight渲染器的免费版本并安装它。之后,运行示例并启用ɴsɪ支持。
cargo run --release --example playground --features nsi,obj
键盘命令
使用与上面列表中运算符名称匹配的键来应用。
使用Up
和Down
调整最后一个运算符的参数。与Shift
结合可进行10倍变化。
Delete
撤销最后一个(并且只有最后一个)操作。
按F1
使用3Delight进行渲染(需要3Delight|ɴsɪ安装)。与Shift
结合可使用3Delight Cloud进行渲染(需要注册)。
按Space
将其保存为$HOME/polyhedron-<type>.obj
。
我使用kiss3d
进行实时预览,目前,这限制了网格到64k个顶点。这意味着一旦网格达到这个限制,预览将出现损坏/丢失的部分。
导出和渲染将始终生成正确的OBJ文件。您可以在Wings、Blender或其他DCC应用程序中查看。
依赖关系
~3–41MB
~634K SLoC