//定义网格组合对象类型 let MeshCombineType={ intersect:0,//交集 union: 1,//并集 subtract:2//差集 } /* 对几何体进行组合 originalObject:初始几何体 combineObject:要进行组合的几何体 meshCombineType:几何体组合类型 */ function ObjectCombine(originalObject,combineObject,meshCombineType) { let resultBsp=null; let originalBsp=new ThreeBSP(originalObject); let combineBsp=new ThreeBSP(combineObject); if(meshCombineType==MeshCombineType.union) { resultBsp=originalBsp.union(combineBsp); } else if(meshCombineType==MeshCombineType.intersect) { resultBsp=originalBsp.intersect(combineBsp); } else { resultBsp=originalBsp.subtract(combineBsp); } let material=originalObject.material; let result=resultBsp.toMesh(material); result.material.flatShading = true;//平坦着色,设置平坦着色, //使用`geometry`的computeFaceNormals()和computeVertexNormals()来确保生成的`Mesh`对象的所有面和顶点的法向量可以正确计算 result.geometry.computeFaceNormals(); result.geometry.computeVertexNormals(); result.material.needsUpdate = true; //更新纹理 result.geometry.buffersNeedUpdate = true; result.geometry.uvsNeedUpdate = true; result.castShadow=true;//可以生成阴影 result.receivedAlert=true; return result; }