ThreeBSP布尔运算
ThreeBSP.js下载three.js本身并没有提供用于几何体布尔运算的构造函数,需要借助一个库ThreeBSP.js实现。几何体的布尔运算可以借助数学中学习的差集、并集、交集概念去理解, 几何体之间的运算本质上就是两个顶点集合的运算,具体运算的算法可以查看计算几何学的理论内容,多数的三维软件基本都有布尔运算的相关命令, 尤其是机械类的三维建模软件,对于计算机辅助设计有兴趣的可以多研究。
两个几何体位置关系
差集(相减)
并集(组合、相加)
交集(两几何体重合的部分)
外圆内方铜钱
绘制一个简易铜钱形状几何体很简单,绘制一个扁圆柱减去一个立方体就可以。
/** * 创建网格模型 */ //几何体对象 var cylinder = new THREE.CylinderGeometry(50,50,5,40);//圆柱 var box = new THREE.BoxGeometry(40,5,40);//立方体 //材质对象 var material=new THREE.MeshPhongMaterial({color:0x0000ff}); //网格模型对象 var cylinderMesh=new THREE.Mesh(cylinder,material);//圆柱 var boxMesh=new THREE.Mesh(box,material);//立方体 //包装成ThreeBSP对象 var cylinderBSP = new ThreeBSP(cylinderMesh); var boxBSP = new ThreeBSP(boxMesh); var result = cylinderBSP.subtract(boxBSP); //ThreeBSP对象转化为网格模型对象 var mesh = result.toMesh(); scene.add(mesh);//网格模型添加到场景中
网格Mesh模型对象作为构造函数ThreeBSP()的参数,可以把three.js的普通Mesh模型包装为ThreeBSP对象,表示对应Mesh对象的ThreeBSP对象可以进行布尔运算 ,计算结果在执行toMesh()方法可以把ThreeBSP对象重新转化为Mesh对象。
布尔计算方法
方法 | 作用 |
intersrct | 交集、重合的部分 |
union | 并集、组合、相加 |
subtract | 差集、相减 |