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缓存

Download history 675/week @ 2024-03-13 870/week @ 2024-03-20 869/week @ 2024-03-27 901/week @ 2024-04-03 794/week @ 2024-04-10 889/week @ 2024-04-17 781/week @ 2024-04-24 678/week @ 2024-05-01 661/week @ 2024-05-08 657/week @ 2024-05-15 738/week @ 2024-05-22 933/week @ 2024-05-29 706/week @ 2024-06-05 682/week @ 2024-06-12 663/week @ 2024-06-19 617/week @ 2024-06-26

2,798 每月下载量
50 个 Crates 中使用 (20 个直接使用)

Apache-2.0

59KB
1.5K SLoC

Genmesh

Build Status Docs Crates.io

genmesh 是一个构建顶点管道的库。目标是帮助简化多边形组装。这是通过在 Iterator 特性之上构建来实现的。管道阶段是一个惰性迭代器,它消耗输入,并基于阶段生成一个新的多边形。

这还提供了一些 generators,用于在运行时创建原始数据。

目前支持的阶段

  • vertex 将一个函数映射到多边形中的每个顶点
  • triangulate 将四边形转换为三角形
  • vertices 将多边形管道转换为顶点管道

原始数据生成器

  • 圆锥
  • 立方体
  • 圆柱
  • 平面
  • 球面 UV
  • 环面

顶点属性

  • pos: 位置
  • normal: 法线

实用工具

  • LruIndexer 将顶点转换为索引,如果当前顶点不在 Lru 缓存中,则发出新的顶点。
  • Neighbors 通过在顶点或多边形级别查询法线和邻居与整个网格一起工作。

原始数据

  • 三角形
  • 四边形
  • PolygonTriangleQuad 的枚举

示例

    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 进行多边形级别的变换。

triangulateQuad<MyVertex> 转换为 Triangle<MyVertex>>。这将产生两个多边形和六个顶点。为了完成此操作,一些顶点被克隆。

verticies 现在展开每个三角形并按顺序返回顶点。对于每个多边形,这显然会产生 3 个结果。

collect 是一个标准的迭代器操作。

依赖项

~1MB
~17K SLoC