threeJS加载外部模型的mesh合并(提高性能)

文章目录

  • 前言
  • threeJS选中模型问题
  • geometry/bufferGeometry 二者都可合并
          • bufferGeometry :
            • geometry:
    • 完整代码
  • 总结


前言

在加载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)

你可能感兴趣的:(threeJS,Vue,JavaScript,three.js)