从一组3D点生成OPEN曲面网格

时间:2019-02-28 05:34:07

标签: surface triangulation geometry-surface

我在3D空间的OPEN曲面上有一组点。 我确定了位于边界上的点的子集。 我的意思是生成这些点的三角剖分,这给了我一个开放的表面,并使我选择的点保持在边界上。

我发现的所有参考都处理(有时是?)封闭的表面,例如CGAL。 请参阅下面的示例。 另外,某些CGAL算法在每个点都需要定向法线,而我没有。

是否有可用的算法和代码? (可以正确处理CGAL Advancing_front_surface_reconstruction或其他任何方法)

另请参阅thisthis


示例1

我从examples/Advancing_front_surface_reconstruction编译并运行了示例reconstruction_surface_mesh.cpp,开箱即用(使用文件half.xyz作为数据点的输入),我获得了一个封闭的表面:< / p>

enter image description here enter image description here

我想摆脱一些封闭表面的三角形。 我尝试在half.xyz的末尾添加一个额外的点,然后得到了

enter image description here enter image description here

这是一个开放的表面。 到目前为止,根据我的测试,我还不知道:

  1. 如何指示开放表面。

  2. 如何指示哪些顶点位于边界处。 如果这是一个非空集(并且它至少应具有三个顶点),则意味着表面开放。

理想情况下,一个工作流程无需人工干预即可工作。


示例2

我开箱即用地编译并运行了示例boundaries.cpp(该示例还使用文件half.xyz作为数据点的输入)。 输出为:

0 outliers:

Boundaries:
boundary
0.178269 0.438589 0.129521
0.0795598 0.419465 0.244812
0.0549683 0.377617 0.3119
-0.0295721 0.360972 0.329075
-0.111332 0.334417 0.342617
-0.186667 0.2953 0.346683
-0.2719 0.16555 0.375017
-0.336304 0.117058 0.339323
-0.393517 0.0775 0.285917
-0.421419 -0.126854 0.215271
-0.395217 -0.214417 0.20015
-0.354783 -0.2953 0.170767
-0.237067 -0.395867 0.172233
-0.178246 -0.438588 0.129553
0.0227767 -0.4873 0.0700833
0.220338 -0.438589 -7.23321e-06
0.293 -0.395867 0
0.36025 -0.334417 0
0.418077 -0.258382 6.0303e-05
0.46025 -0.17265 0
0.484417 -0.0425167 -0.0763333
0.485067 0.03875 -0.0782667
0.471547 0.117058 -0.076827
0.44605 0.197567 -0.0700833
0.4092 0.27125 -0.0433167
0.364885 0.329645 0
0.313633 0.377617 0.0441167
0.2509 0.41425 0.0879333

我没有找到如何将其用于 自动删除三角形,使我的目标边界顶点不在边界处。

此外,输出似乎是边界点列表,没有“虚假”三角形(我不确定)。我想指定此列表。

1 个答案:

答案 0 :(得分:-1)

CGAL advancing front reconstruction algorithm通常会生成开放曲面。