在给定以下内容的情况下,建议生成特定类型体的表面网格的方法是什么?
几何体是挤压的3D“管”段。管段具有以下属性:
- 在 X 的每个值处,横截面始终是 Y-Z 平面中的简单多边形
- 不保证多边形是凸起的
- 当遍历 X 时,多边形不一定是常数;它们平滑地扩张和/或改变形状,并且多边形的区域平滑地变化
- 每个 X = const 多边形的质心,如果用简单的线段连接在一起,就会形成一个非常光滑,表现良好的“螺纹”,曲率最平缓,没有尖锐的弯曲,折叠,或循环等。
- 表面部分由 X = X_start 处的平面横截面多边形加盖, X = X_end
目标:
- 生成管表面的三角形表面网格,考虑到它在开始和结束时由平坦的平面横截面界定
- 网格应该是管子,而不是管子的凸包
- 如果管表面网格保持了由 X = X_start 和 X = X_end 处的顶点形成的扁平简单多边形横截面的属性,那么我现有的代码可以对端盖进行网格划分;我想解决的真正问题是生成3D管表面网格。如果解决方案也可以生成端盖,那也没关系。但是,出于输出目的,端盖表面需要是可识别的。
- 一旦生成网格,就需要以OFF这样的格式编写,我认为我可以根据CGAL中包含的代码,示例等来处理。这里的要点是我不需要能够在生成网格后,以编程方式进一步处理网格(例如,变形,添加/删除点)。
已知输入和属性:
- 我在 X_start 和 X_end 之间的任意数量的 X = const 站点处有多边形横截面管表面顶点;当我创建/导入点
时,我可以根据需要控制 X 方向的间距
- 顶点恰好位于管表面,不会被任何噪音,晃动,采样,近似等破坏。
- 除了多边形顶点顺时针方向外,我对形成每个横截面多边形的顶点的相对位置没有任何保证
- 我可以根据 YZ 组件生成多边形顶点的法线,但我没有关于 X 方向上的正常组件的先验信息< / LI>
- 如果需要,我可以在端盖上生成任意数量的顶点
- 现在顶点是3空间浮点坐标值,但如果它可以以某种方式帮助,我可以将每个横截面转换为正式的CGAL 2D排列
- 估计的顶点数量可能小于1000,绝对低于15K。处理时间不是问题。
理想:
- 理想情况下,表面网格物体只会使用我拥有的顶点,而不会减去或移动任何顶点,但只要它们“接近”,这不是一个严格的约束
- 我需要在 X_start 和 X_end 处使用简单的多边形顶点,以便我可以按预期为表面设置上限
最初,CGAL的Poisson Surface Reconstruction method看起来很有希望,但最终它似乎会导致处理管道可能会污染我的顶点;另外,除了端盖之外,我没有完整的3D正常信息。而且,该方法似乎具有尖锐,明显的横截面端子面表面的问题。也许我可以绕过后者,通过放入一堆良性假顶点来扩展和终止管,然后过滤掉我不需要的三角测量的部分,但是不能保证 X_start处的顶点和 X_end 将保留,我将不得不“修复”跨越这些平面的三角测量,这似乎并非无足轻重。
另一种可能性可能是使用CGAL的3D mesh generator计算完整的3D体网格,但只写出包含表面网格的部分。这合理吗?如果我可以保留原始输入顶点,并且这种整体方法是合理的,我可以在我写出三角测量时过滤,以区分形成端盖的面与管面。
我也看到了这个问题Representing a LiDAR surface using the 3D Delaunay Triangulation as basis?似乎有一些相似之处(试图保留输入点,以及表面属性的一些预知),但最后我觉得我的用例太不一样了