luxiaotao1123
2021-11-17 85d878b12d6988ca2275d60e7da0ec31814f8fc8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
//定义网格组合对象类型
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;
}