76个版本 (16个稳定版)

1.0.15 2024年5月21日
1.0.13 2023年12月17日
1.0.11 2023年11月6日
1.0.10 2023年2月5日
0.1.1 2016年7月14日

#738 in 图形API

Download history 13274/week @ 2024-04-20 12314/week @ 2024-04-27 12332/week @ 2024-05-04 10699/week @ 2024-05-11 12056/week @ 2024-05-18 12758/week @ 2024-05-25 13318/week @ 2024-06-01 13068/week @ 2024-06-08 13915/week @ 2024-06-15 11840/week @ 2024-06-22 8782/week @ 2024-06-29 12399/week @ 2024-07-06 20289/week @ 2024-07-13 19019/week @ 2024-07-20 16225/week @ 2024-07-27 14450/week @ 2024-08-03

每月72,295次下载
用于 215个 库(19个直接使用)

MIT/Apache

1MB
35K SLoC

lyon::tessellation

填充和描边2D路径的细分。

crates.io documentation

lyon_tessellation 可以作为一个独立的库使用,也可以通过 lyon::tessellation 模块作为 lyon 的一部分。


lib.rs:

2D填充和描边操作的细分。

此库在 lyon 中被重新导出。

概述

此库中最有趣的数据类型和特性包括:

  • FillTessellator - 复杂路径填充操作的细分器。
  • StrokeTessellator - 复杂路径描边操作的细分器。
  • GeometryBuilder - (参见 geometry_builder 模块 的文档) 这两个都是基于此特性构建的。该特性为辅助构建和组装构成细分的多边形和三角形的类型提供了一个接口,通常以任意顶点和索引缓冲区形式存在。

细分管线

FillTessellator GeometryBuilder 输出 VertexConstructor Iterator<PathEvent> builder.add_vertex(FillVertex) -> VertexId;builder.add_triangle(VertexId, VertexId, VertexId); FillVertex -> CustomVertex MoveTo(Point)LineTo(Point)Close

上图展示了填充细分管线每个步骤的简化总结。

输入:迭代器

路径细分器不绑定到特定的数据结构。相反,它们消耗平铺路径事件的迭代器。在 lyon_path 包中提供了一个 Path 结构 以便使用(但不是必需的)。

输出:几何构建器

拼贴器在实现GeometryBuilder trait的类型上进行了参数化。此trait提供了一些简单的方法来添加顶点和三角形,而不强制执行任何特定于结果几何形状的表示。这很重要,因为每个应用程序通常都希望根据自己的顶点类型和特定的渲染模型来工作。

应用程序可以实现GeometryBuilder<Point> trait,以生成具有自定义顶点类型的顶点缓冲区和索引缓冲区。

为了方便起见,提供了结构体VertexBuffersgeometry_builder::BuffersBuilderVertexBuffers<T> 包含一个顶点的 Vec<T> 和一个索引的 Vec<u16>

BuffersBuilder 是一个泛型,它有一个 VertexConstructor<InputVertex, OutputVertex> trait,该trait创建应用程序的输出顶点,从拼贴器的输入顶点(无论是 FillVertex 还是 StrokeVertex)。

渲染拼贴几何形状

拼贴器产生顶点和索引缓冲区的几何形状,这些缓冲区预期将使用OpenGL的 glDrawElementsGL_TRIANGLES 模式渲染,在不同图形API中可用名称各异。有一个示例显示了如何使用wgpu完成此操作。

展平和容差

此crate中大多数拼贴器目前都在处理展平的路径(由线段序列表示的路径或形状)。当路径包含贝塞尔曲线或圆弧时,后者需要用线段序列来近似。这种近似取决于一个表示曲线与其展平近似之间最大距离的 tolerance 参数。

有关展平和容差的更多解释,请参阅lyon_geom crate

示例

依赖关系

~1.5MB
~35K SLoC