前言
在加载gltf模型的时候,为了提高性能和单击可以选中单个楼栋想让建模人员合并成一个mesh,3DMax无法把单个项目合并成一个文件,所以就是想合并gltf里面的mesh
threeJS选中模型问题
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030218024051.png#pic_center)
geometry/bufferGeometry 二者都可合并
bufferGeometry :
bufferGeometry.merge(bufferGeometry:BufferGeometry,offset:Integer) // 简单的模型合并
geometry:
geometry.merge( geometry : Geometry, matrix : Matrix4, materialIndexOffset : Integer )
geometry合并模型的时候肯定要保留各自的材质,geometry3个参数 (材质,矩阵,材质索引)
完整代码
代码如下(示例):
const meshArr = [] // mesh数组
const materialArr = [] // 材质数组
// 获取集合体/材质数组
res.traverse((child) => {
if (child.isMesh) {
meshArr.push(child)
materialArr.push(child.material)
}
})
// 循环合并
var geometry = new THREE.Geometry()
for (var i = 0; i < meshArr.length; i++) {
meshArr[i].updateMatrix()
geometry.merge(new THREE.Geometry().fromBufferGeometry(meshArr[i].geometry), meshArr[i].matrix, i)
}
// 实例化成mesh网格
/*
* geometry合并后的集合体
* materialArr 保留的材质数组
*/
var mesh = new THREE.Mesh(geometry, materialArr)
。
参考大佬文档 :[链接地址](https://blog.csdn.net/qq_30100043/article/details/83659987)
总结
有时候合并会出现模型不符合需要使用
new THREE.Geometry().fromBufferGeometry (Geometry转BufferGeometry)
new THREE.BufferGeometry().fromGeometry (BufferGeometry转Geometry)