切片3D模型?

时间:2017-01-05 18:43:02

标签: c# unity3d 3d

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

我还需要按如下方式检测孔洞(孔标记为红色): Example result with holes

如果不可能按照我的想法(似乎如此)这样做,我应该怎么做?开发人员如何在切片后封顶对象?

也有太多混乱。例如,第一张图片的结果可能是: Confusion 我错过了什么?

修改 经过一番研究,我知道一件事我不知道: enter image description here

输入现在很稳健,我需要完全相同的输出。我该如何实现?

3 个答案:

答案 0 :(得分:5)

过去,我使用BSP完成了这种事情。

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

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

答案 1 :(得分:5)

正如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

我希望它有所帮助。

答案 2 :(得分:2)

建立zwcloud所说的,你的点表示是模棱两可的。您根本没有足够的点来确定实际上凹陷/凹陷的位置。

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

这些漏洞有点棘手。也许你只需从收缩包装计算的输出中查看排除的点并试图找到其他形状,启发式地偏向位于新创建的多边形的质心附近的点,就可以逃脱。

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