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

问题描述 投票:1回答:1

我在3D空间的OPEN表面上有一组点。我已经确定了边界上的一个点子集。我的意思是生成这些点的三角测量,这给我一个开放的表面并保持我选定的点在边界上。

我发现的所有参考文献都涉及(有时是?)封闭的表面,例如CGAL。见下面的例子。此外,一些CGAL算法需要在每个点定向法线,这是我没有的。

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

另见thisthis


Example 1

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

enter image description here enter image description here

我想摆脱几个靠近表面的三角形。我试着在half.xyz的末尾添加一个额外的点,我得到了

enter image description here enter image description here

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

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

理想情况下,人们可以使用无需人工干预的工作流程。


Example 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

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

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

surface triangulation geometry-surface
1个回答
-1
投票

CGAL advancing front reconstruction algorithm确实产生了开放的表面。

© www.soinside.com 2019 - 2024. All rights reserved.