从一组3D点生成OPEN曲面网格 [英] Generate OPEN surface mesh from a set of 3D points

查看:364
本文介绍了从一组3D点生成OPEN曲面网格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a set of points on an OPEN surface in 3D space. I have identified a subset of points which lay on the boundary. I mean to generate a triangulation of those points, which gives me an open surface and keeps my selected points on the boundary.

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

All references I found deal with (sometimes?) closed surfaces, e.g., CGAL. See examples below. In addition, some CGAL algorithms require oriented normals at each point, which I do not have.

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

另请参见.


示例1

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

I compiled and ran example reconstruction_surface_mesh.cpp from examples/Advancing_front_surface_reconstruction, out-of-the box (which uses file half.xyz as input for data points), and I obtained a closed surface:

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

I would like to get rid of the few triangles that close the surface. I tried adding an extra point at the end of half.xyz, and I got

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

which is an open surface. So far, with what I tested, I do not know:

  1. 如何指示开放的表面.

  1. How to indicate an open surface.

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

How to indicate which vertices lay at the boundary. If this is a non-empty set (and it should have at least three vertices) this would imply an open surface.

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

Ideally, one would have a workflow which works without manual intervention.


示例2

我编译并运行了示例 boundaries.cpp ,框(也使用文件half.xyz作为数据点的输入). 输出为:

I compiled and ran example boundaries.cpp, out-of-the box (which also uses file half.xyz as input for data points). The output is:

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

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

I did not find how to use this for automatically removing triangles which would make my target boundary vertices not laying at the boundary.

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

Moreover, the output seems to be the list of boundary points, without the "spurious" triangles (I am not sure). I would like to specify this list.

推荐答案

CGAL 推进前端重建算法通常会生成开放曲面.

The CGAL advancing front reconstruction algorithm does generate open surfaces in general.

这篇关于从一组3D点生成OPEN曲面网格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆