2

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

下面是一个以 3d 呈现的减去图像应该是什么样子的示例: 正确的实体减法

相反,该函数会产生如下内容: Failed Solid Subtraction

您可以看到一些顶点已留在减去的实体上方,这会导致渲染和进一步操作出现问题。我在这里的存储库上打开了一个 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, 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, 734.575, 97.125],
[1062.208, 276.028, 97.125],
[889.654, 276.028, 97.125],
[889.654, 504.099, 97.125],
[744.585, 504.099, 97.125]],

[[744.585, 734.575, 1297.125],
[1062.208, 734.575, 1297.125],
[1062.208, 734.575, 97.125],
[744.585, 734.575, 97.125]],

[[1062.208, 734.575, 1297.125],
[1062.208, 276.028, 1297.125],
[1062.208, 276.028, 97.125],
[1062.208, 734.575, 97.125]],

[[1062.208, 276.028, 1297.125],
[889.654, 276.028, 1297.125],
[889.654, 276.028, 97.125],
[1062.208, 276.028, 97.125]],

[[889.654, 276.028, 1297.125],
[889.654, 504.099, 1297.125],
[889.654, 504.099, 97.125],
[889.654, 276.028, 97.125]],

[[889.654, 504.099, 1297.125],
[744.585, 504.099, 1297.125],
[744.585, 504.099, 97.125],
[889.654, 504.099, 97.125]],
    
[[744.585, 504.099, 1297.125],
[744.585, 734.575, 1297.125],
[744.585, 734.575, 97.125],
[744.585, 504.099, 97.125]],

[[744.585, 734.575, 1297.125],
[744.585, 504.099, 1297.125],
[889.654, 504.099, 1297.125],
[889.654, 276.028, 1297.125],
[1062.208, 276.028, 1297.125],
[1062.208, 734.575, 1297.125]]]

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

4

0 回答 0