【发布时间】:2015-12-12 19:05:59
【问题描述】:
我从这个网站开始使用剪辑库:http://sourceforge.net/projects/polyclipping/
我在 Unity(C#) 中工作。
一切都很好,联合,交叉点,差异......是的,差异,有一种情况是我不确定我做错了什么或算法无法正确处理。
我正在尝试获取 A-B 的差异,它应该看起来像图 2)中的那个,不幸的是,输出是图 1)中的网格 A 和网格 B。
我做什么:
Clipper c = new Clipper();
c.AddPath(here goes the vertices of mesh A, polyType.Subject, true);
c.AddPath(here goes the vertices of mesh B, polyType.Clip, true);
c.Execute(ClipType.ctDIfference, a list of lists for my output, PolyFillType.NonZero, PolyFillType.NonZero);
我已经尝试更改 PolyFillTypes,但它没有任何改变。我在这里,征求你的意见:)
编辑: 我想要得到(如图“预期结果”)是带孔的网格。 我实际得到的是 2 元素列表列表,其顶点与我作为输入提供的完全相同的顶点,所以当我从这些顶点创建网格时,没有一个网格有孔,而是一个网格覆盖另一个网格和 Z-Fighting。应该有一些功能可以创建带有孔的网格,但我无法找到它。正如我在该库的 C# 版本的 GUIDEMO 中看到的那样,它可以工作,我看到地图(可能是澳大利亚)中间有一个切孔。
输入:顶点 A(作为主体):(0,0), (0,10), (10,10), (10,0)。
顶点 B(作为剪辑):(2,8),(6,8),(6,2),(2,2)。
输出完全相同:
List<List<IntPoint>> 是 2 元素,包含这两个列表。您可以在上面看到。
【问题讨论】:
-
如果您显示从剪辑操作获得的结果坐标,然后显示您期望的坐标,将会有所帮助。
-
我编辑了我的帖子,以便您更清楚地看到这一点。谢谢你的时间:)
-
我有这个相同的问题(unity 3d c#),你找到解决方案了吗? clipperlib 是实现“C”顶点的正确工具吗?
标签: unity3d polygon mesh clipping