我目前正在使用这个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]]]
这里有什么问题?是否有更好的实体几何库可供我使用?