如果您使用ThreeCSG
布尔运算,您应该从一开始就尝试将您的对象定义为 BSP 树或节点。它将提供更精确的结果,它可能会帮助您在不崩溃浏览器的情况下让更大的几何图形工作。
我在这里做了一个小提琴,你可以明白我的意思。结果如下所示:
- 在左侧,您可以看到我们在操作中使用的形状(仅用于可视化)。
- 中间的布尔结果是通过从
THREE.PlaneGeometry
转换为 BSP 的 a 中减去转换为 BSP 的 a创建的THREE.BoxGeometry
。
- 右侧的布尔结果是通过从原生 BSP 盒对象中减去原生 BSP 平面创建的。
如您所见,中间结果有 5 个以上的顶点,这意味着更多的面(顶部、两侧和底部多出 1 个,对角线平面多出 2 个)。
如果您对此结果进行另一个布尔运算,您将获得更多的点和顶点。您的 BSP 树将呈指数增长......!
换句话说,您的 BSP 树会随着每个布尔运算而变大,使其变慢,并且最终也可能崩溃。
如果您想做大量布尔运算,请尝试制作原生 BSP 形状以获得更好的结果,而不是使用转换后的 three.js 几何图形进行布尔运算。
所以而不是:
myBSP = new ThreeBSP( geometry );
做:
var polygons = [
// define your polygons using new ThreeBSP.Polygon( vertices )
];
var node = new ThreeBSP.Node(polygons);
myBSP = new ThreeBSP(node);
然后做你的布尔运算......