采用BufferGeometryUtils.mergeBufferGeometries工具对多个Mesh模型进行合并。
引入BufferGeometryUtils工具
import * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'
封装模型合并公共方法
参数
属性 | 类型 | 说明 | 默认值 | 必选 |
---|---|---|---|---|
meshs | Array | 模型集合 | [] | 是 |
name | String | 模型名称 | - | 是 |
useGroups | Boolean | 是否使用多材质 | true | 否 |
方法
mergeMeshs(options = {}) {
const { meshs = [], name, useGroups = true } = options
const [geometries, materials] = [[], []]
if(meshs.length == 0) return
meshs.forEach(mesh => {
if(mesh.isMesh) {
const geo = mesh.geometry.clone()
materials.push(mesh.material)
geo.index = null
mesh.updateWorldMatrix(true, true)
geo.applyMatrix4(mesh.matrixWorld)
geometries.push(geo)
}
})
let mesh = null
if(geometries.length != 0 && materials.length != 0) {
if(geometries.length > 1) {
const mergedGeometries = BufferGeometryUtils.mergeBufferGeometries(geometries, useGroups)
mesh = new THREE.Mesh(mergedGeometries, useGroups ? materials : materials[materials.length - 1])
} else {
mesh = new THREE.Mesh(geometries[geometries.length - 1], materials[materials.length - 1])
}
name && (mesh.name = name)
}
return mesh
}
示例
mergeMeshs({
meshs: [],
name: ''
})