微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这个 CSG 库的减法函数会留下顶点?

如何解决为什么这个 CSG 库的减法函数会留下顶点?

我目前正在使用 this CSG 库来减去两个实体。我选择这个特定的库是为了使用我的项目的 .NET Framework 4.5 依赖项。 我的目标是能够对两个凹面成功使用布尔运算。但是,当我减去两个实体时,该函数会留下相减形状的一些顶点。

以下是减影图像的外观示例,以 3d 呈现: Correct Solid Subtraction

相反,该函数产生如下结果: Failed Solid Subtraction

您可以看到一些顶点已留在减去的实体上方,这会导致渲染和进一步操作出现问题。我在存储库 here 上打开了一个 GitHub 问题,我还使用 NUnit.Framework 创建了一个失败的单元测试,它从 .json 文件中读取点(内容如下):

[Test]
        public void coplanarConcave ()
        {
            using StreamReader r = new StreamReader ("TestCase.json");
            string json = r.ReadToEnd ();
            List<List<List<double>>> items = JsonConvert.DeserializeObject<List<List<List<double>>>> (json);
            var vectorList = items.Select (doublesList =>
                doublesList.Select (doubles => new Vector3D (doubles[0],doubles[1],doubles[2])).ToList ()).ToList ();
                
            var texture = new Vector2D (0,0);
            var vertices = vectorList.Select (vertex => vertex.Select (vector => new Vertex (vector,texture)).ToList ())
                .ToList ();
            var polyArray = vertices.Select (vertex => new polygon (vertex)).ToList ();
            
            var solid = Solid.Frompolygons (polyArray);
            var testSolid = solid.Translate (0,10);

            var result = solid.Substract (testSolid);
            var badpolygons =
                result.polygons.Where (polygon => polygon.Vertices.Any (vertex => vertex.Pos.Z >= 217.125));
            Assert.IsEmpty (badpolygons);
        }
[[[744.585,734.575,97.125],[1062.208,276.028,[889.654,504.099,[744.585,97.125]],[[744.585,1297.125],[[1062.208,[[889.654,1297.125]]]

这里有什么问题?我可以使用更好的实体几何库吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。