根据网格为每个顶点计算法线,并将其存储在从 normalIdx 开始的三个属性通道中。
比 minSharpAngle(以度为单位)更锐利的边在两侧保留各自的法线并保持锐利;为 0 时每个三角形保留自己的法线。由多个三角形组成的平面保持平坦。
实体、第一个法线通道和以度为单位的锐角阈值
存储了法线的实体
计算曲面在每个顶点处的弯曲强度并存储在属性通道中:高斯曲率存于 gaussianIdx,平均曲率存于 meanIdx。
曲率是弯曲半径的倒数,曲面凸处为正,凹处为负;小于 0 的索引跳过该通道。
实体和用于存储的两个通道
存储了曲率的实体
向平滑过的实体添加三角形,直到其网格的每个点都位于距光滑曲面 tolerance 以内,因此弯曲剧烈的区域比平坦区域获得更多三角形。
只有用 smoothOut 或 smoothByNormals 平滑过的实体会改变;其他任何实体以副本返回。
实体和以模型单位表示的容差
细化后的实体
通过将每条边分割成大致给定长度的段来向实体添加三角形,并添加内部顶点以保持三角形均匀。
在用 smoothOut 或 smoothByNormals 平滑过的实体上,新顶点移到光滑曲面上;否则曲面保持原样。
实体和以模型单位表示的目标边长
细化后的实体
通过将每条边分成 number 段来向实体添加三角形;为 2 时每个三角形变成四个。
在用 smoothOut 或 smoothByNormals 平滑过的实体上,新顶点移到光滑曲面上;否则新三角形保持平坦。
实体和每条边要分成的段数
细化后的实体
通过从其三角形计算切线将实体标记为平滑,使后续的 refine 或 refineToLength 将新三角形弯成光滑曲面。
比 minSharpAngle(以度为单位)更锐利的边保持锐利;minSmoothness 大于 0 时将这些边稍微倒圆,为 1 时平滑一切。几何本身在细化之前不会改变。
实体、以度为单位的锐角阈值和锐边的平滑度
带有平滑切线的实体
使用存储在其顶点属性中的法线将实体标记为平滑,使后续的 refine 或 refineToLength 将新三角形弯成光滑曲面。
normalIdx 是三个法线通道中的第一个,与 calculateNormals 存储的一致;顶点上的法线不一致处,边保持锐利。
实体和第一个法线通道
带有平滑切线的实体
从实体的网格中移除顶点,同时使每个曲面保持在距原位 tolerance 以内,以减少三角形数量。
结果保留原始顶点的子集;实体自身的容差值保持不变。
实体和曲面允许移动的距离,以模型单位表示
简化后的实体
用一个函数重写实体的顶点属性,该函数接收每个顶点的位置和旧属性并填入新属性。
numProp 设置之后每个顶点有多少个属性,因此可以添加或删除通道;读取超过旧数量或写入超过新数量的行为是未定义的。
实体、新的属性数量和填充属性的函数
带有新属性的实体
为实体赋予新的容差,即它允许携带的舍入误差,并在容差增大时简化其网格。
比容差更薄的三角形被视为退化并移除。
实体和以模型单位表示的容差
带有新容差的实体
预留连续 count 个唯一网格 id 并返回第一个,用于标记在后续操作之后仍能再次找到的三角形集合。
在由网格构建实体之前将它们赋给网格的 runOriginalID,例如用于区分多种材质。
要保留的 id 数量
保留 id 中的第一个;其余依次递增
创建实体的一个算作新原始体的副本,使该副本可以携带自己的顶点属性(例如不同的 UV 映射),并与其构建来源区分开。
过程中共面的面被合并,它们之间的边被折叠;当这些边必须保留时,请改用网格途径。
实体
标记为原始的副本
将多个实体打包成一个,是 decompose 的逆操作。
重叠的实体会像布尔并集那样被融合;保持分离的实体则作为同一结果的独立部分保留。
要打包在一起的实体
容纳所有实体的一个实体
将实体拆分为其分离的、不相连的各块,是 compose 的逆操作。
完整一块的实体以只含一个副本的列表返回。
实体
分离出的各个部分
用与 XY 平面平行、位于给定 Z 高度的平面切割实体,并以横截面返回平面截面。
位于实体包围盒底部的高度给出其底面;位于顶部的高度给出空横截面。
实体和切割的 Z 高度
以横截面表示的截面
将实体压平到 XY 平面上并以横截面返回其轮廓,就像正上方光源下的影子。
实体
以横截面表示的轮廓
将实体包裹在其凸包中,即包含它、没有凹陷的最小形状,就像紧紧包在它上面的收缩膜。
实体
凸包
将点、实体或两者的混合包裹在一个凸包中,即包含它们全部、没有凹陷的最小形状。
要包裹的点和实体
凸包
布尔运算之外更改 Manifold 实体的方法:用凸包包裹它们,通过切片和投影得到横截面,细化和平滑其网格,简化它们,组合和分解它们,以及将法线和曲率计算到顶点属性通道中。属性通道是存储在网格上的每个顶点一个数值,例如法线的三个通道。每个方法都返回新实体。