ThreeJS官方加载Ldraw文件,实质就是通过循环加载.mpd文件里每一个dat模型,这样相同的dat就会出现重复加载,因此要提升加载速度,唯有将这个流程简化。
说一下我的思路:
- 第一步先将ldraw模型文件先解析出来,记录下每一行dat数据的同时,也统计下本模型只需要加载哪些dat模型。
- 接下来,先加载出来本模型所需要的dat模型零件,存到一个列表里,这些模型作为基础模型不需要添加到场景中。
- 通过用ThreeJS.Object3D的clone()方法,从加载出来的模型列表里找出相同名字的dat模型,不需要做重复的加载工作。毕竟clone一个模型比load一个模型速度快太多了。
- 最后要将clone出来的模型矩阵信息传进来,还有材质附上就大功告成了。
model.matrix.premultiply(_matrix);
model.matrix.decompose(model.position, model.quaternion, model.scale);
model.children[1].material = _material.clone();
最后总结:加载型零件越多,相同dat越多的模型文件速度提升越快,加载的时间提升不止两三倍以上。项目代码复杂,无法提供源码参考,本方案仅作参考,有更好的解决方案欢迎大家指点。
网友评论