我正在尝试将两个几何图形/网格(红色和蓝色)合并为一个独特的几何图形/网格。但是在创建新的几何体并应用 Geometry.merge() 之后,我发现所有内部顶点和面仍然存在(绿色区域)。
我想删除所有这些额外的信息,因为它会在渲染的面上产生视觉故障,而且我无法正确计算合并的体积。我需要像最后一张图片那样的东西,一个仅包含最小外部/外部的网格面和顶点,删除内部的。
我尝试应用 ThreeCSG 来减去网格,但我发现它在尝试加载大模型时不断崩溃。我还尝试应用光线投射器来检测常见的面孔,但这对大型模型的性能也有很大影响。
ThreeCSG 是这里唯一好的选择吗?但由于我不能在每个模型上使用它,所以我应该放弃它。我想快速应用一些不太依赖于网格三角形数量的东西。
如果您与ThreeCSG
和布尔运算,您应该尝试从一开始就将对象定义为 BSP 树或节点。它将提供更精确的结果,并且可以帮助您在不使浏览器崩溃的情况下使更大的几何图形正常工作。
I made 这里有一个小提琴 https://jsfiddle.net/wilt/dpw1y2Lt/5/在那里你可以明白我的意思。结果如下:
- 在左侧,您可以看到我们在操作中使用的形状(仅用于可视化)。
- 中间的布尔结果是通过减去
THREE.PlaneGeometry
从a转换为BSPTHREE.BoxGeometry
已转换为 BSP。
- 右侧的布尔结果是通过从本机 BSP 框对象中减去本机 BSP 平面而创建的。
正如您所看到的,中间结果多了 5 个顶点,这意味着也有更多的面(顶部、两侧和底部多了 1 个,对角平面上多了 2 个)。
如果您对此结果进行另一次布尔运算,您将获得更多的点和顶点。你的 BSP 树将会呈指数级增长......!
换句话说,你的 BSP 树会随着每次布尔运算而变大,使其变慢,并且最终也可能崩溃。
如果您想要执行大量布尔运算,请尝试制作原生 BSP 形状以获得更好的结果,而不是使用转换后的 Three.js 几何图形执行布尔运算。
所以而不是:
myBSP = new ThreeBSP( geometry );
do:
var polygons = [
// define your polygons using new ThreeBSP.Polygon( vertices )
];
var node = new ThreeBSP.Node(polygons);
myBSP = new ThreeBSP(node);
然后进行布尔运算...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)