28 个版本
使用旧的 Rust 2015
0.6.2 | 2018 年 6 月 8 日 |
---|---|
0.5.0 | 2017 年 5 月 29 日 |
0.4.1 | 2016 年 9 月 5 日 |
0.4.0 | 2015 年 12 月 28 日 |
0.0.1 | 2014 年 11 月 21 日 |
114 在 缓存 中
2,798 每月下载量
在 50 个 Crates 中使用 (20 个直接使用)
59KB
1.5K SLoC
Genmesh
genmesh
是一个构建顶点管道的库。目标是帮助简化多边形组装。这是通过在 Iterator
特性之上构建来实现的。管道阶段是一个惰性迭代器,它消耗输入,并基于阶段生成一个新的多边形。
这还提供了一些 generators
,用于在运行时创建原始数据。
目前支持的阶段
vertex
将一个函数映射到多边形中的每个顶点triangulate
将四边形转换为三角形vertices
将多边形管道转换为顶点管道
原始数据生成器
圆锥
立方体
圆柱
平面
球面 UV
环面
顶点属性
pos
: 位置normal
: 法线
实用工具
LruIndexer
将顶点转换为索引,如果当前顶点不在Lru
缓存中,则发出新的顶点。Neighbors
通过在顶点或多边形级别查询法线和邻居与整个网格一起工作。
原始数据
三角形
四边形
Polygon
是Triangle
和Quad
的枚举
示例
let vertex_data: Vec<MyVertex> = Cube::new()
.vertex(|v| MyVertex::new(v.pos, [0., 0.]))
.map(|Quad{x: v0, y: v1, z: v2, w: v3}| {
Quad::new(MyVertex::new(v0.a_Pos, [0., 0.]),
MyVertex::new(v1.a_Pos, [1., 0.]),
MyVertex::new(v2.a_Pos, [1., 1.]),
MyVertex::new(v3.a_Pos, [0., 1.]))
})
.triangulate()
.vertices()
.collect();
在这里,Cube
生成六个面,每个面代表一个侧面,这被表示为 Quad<Vertex3<f32>>
。
vertex
将一个函数映射到每个面的每个顶点上,在这种情况下,我们想要将 genmes
的内部顶点格式转换为我们自己的格式。我们现在有一个 Quad<MyVertex>>
。
我们可以在多边形级别进行变换并修改整个多边形。在示例中,我们为每个面添加一个有效的纹理坐标。由于 genmesh 只是一个迭代器的扩展,我们可以仅使用 map
进行多边形级别的变换。
triangulate
将 Quad<MyVertex>
转换为 Triangle<MyVertex>>
。这将产生两个多边形和六个顶点。为了完成此操作,一些顶点被克隆。
verticies
现在展开每个三角形并按顺序返回顶点。对于每个多边形,这显然会产生 3 个结果。
collect
是一个标准的迭代器操作。
依赖项
~1MB
~17K SLoC