切片 3D 模型?

Posted

技术标签:

【中文标题】切片 3D 模型?【英文标题】:Slicing a 3D model? 【发布时间】:2017-01-05 18:43:02 【问题描述】:

我想相对于无限平面(在 WPF 中)对 3D 模型进行切片。我正在检查边缘是否与无限平面相交。如果为真,我将在相交位置创建一个新点,因此我会得到几个要在其上生成上限的点,以便在切片后关闭模型。例如,如果这是横截面,结果将如下所示: 注意:三角测量并不重要。我只需要三角形。

我还需要检测孔如下(孔标记为红色):

如果不可能按照我的想法去做(似乎是这样),我该怎么做?对象被切片后开发者如何盖帽?

还有太多的困惑。例如,第一张图片的结果可能是: 我错过了什么??


编辑: 经过一番研究,我知道我缺少一件事:

输入现在很健壮,我需要完全相同的输出。我该如何做到这一点??

【问题讨论】:

我不确定我是否完全理解您的需求。你的意思是剪这样的模型吗? mathalino.com/sites/default/files/images/conic-sections_0.jpg 如果你只是追求视觉效果,我可能会为你准备一个着色器。 我需要修改几何图形 @Chairs 。结果将被 3D 打印出来。 如何定义边框和孔?只是有些点不能用来确定。 我沿着切割平面进行光线投射 【参考方案1】:

过去,我使用BSP 做过这种事情。

抱歉说得这么模糊,但这不是一个小问题!

基本上,您将三角形网格转换为 BSP 表示,将剪裁平面添加到 BSP,然后将其转换回三角形。

【讨论】:

链接好像坏了。你有镜子吗? 抱歉,现在应该修复了。【参考方案2】:

正如code11所说,你解决这个问题的数据太少,积分不够。

您应该剪裁整个三角形,而不是剪裁边缘以产生新点,这将为您提供新的边缘。这样,您将拥有一堆相连的边,而不是一堆点。

在您的带有孔的示例中,通过这个单一的修改,您将获得 3 个多边形 - 这几乎是您所需要的。然后,您将只需要计算正确的三角剖分。

查找CSG 术语或Constructive Solid Geometry。

编辑:

如果通用 CSG 对您来说太慢并且您已经剪裁了边缘,那么我建议尝试“剪耳”算法。

这里有一些支持孔的描述: https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf

您也可以尝试“扫描线”方法: http://sites-final.uclouvain.be/mema/Poly2Tri/

还有关于 SO 的类似问题,有很多想法: Polygon Triangulation with Holes

希望对你有帮助。

【讨论】:

CSG 对于我的目的来说太慢了,我已经更新了我的问题,以便输入是一组连接的边。 我为你找到了一些算法,也许这会有所帮助。【参考方案3】:

根据 zwcloud 所说的,您的点表示是模棱两可的。您根本没有足够的点来确定任何凹面/凹口的实际位置。

但是,如果您可以通过获得额外的点来解决这个问题(我认为您需要段的中点),您只需将这些点放入 shrinkwrap 算法中。那么至少你会有一个上限。

这些洞有点棘手。也许您可以只查看从收缩包裹计算的输出中排除的点并尝试在其中找到其他形状,启发式地偏爱位于新创建多边形的质心附近的点。

额外的想法:如果你可以将自己限制为只有一个类似凸孔的凸多边形,那么问题将更容易解决。

【讨论】:

以上是关于切片 3D 模型?的主要内容,如果未能解决你的问题,请参考以下文章

3D打印技术之切片引擎

使用 Materialise magics 对 STL文件进行切片

3D打印--相关知识

Python NumPy - 3D 数组的角度切片

Matlab分配3D数组的1D切片

基于 2D 数组的 3D numpy 切片的平均值