如何在Three.js中保存加载的模型?

时间:2019-06-12 07:23:37

标签: javascript three.js

我正在做一个视频游戏,但我遇到了内存问题,即我在游戏中加载了8个obj模型,但是我重复了它们,所以这意味着每次我需要在地图的不同位置添加相同的模型时,已经完成:

new THREE.MTLLoader().setPath( './Tree/' ).load( 'untitled.mtl', function ( materials ) {
     materials.preload();
     new THREE.OBJLoader().setMaterials( materials ).setPath( './Tree/' ).load( 'tree.obj', function ( object ) {
        object.scale.set(2, 2, 2);
        object.position.set(10, 0, 30);
        scene.add( object );
     }, undefined, undefined );
});


这样,每次调用此命令时,我都会在内存中标识相同的对象,并且需要大量内存。有什么方法可以只将一个副本保存在内存中,每当我需要它时,我都只称这个副本为一?

我已经在网上寻求帮助,但没有找到/了解任何解决方案。

1 个答案:

答案 0 :(得分:1)

您可以通过Object3D.clone()克隆对象,而不必多次加载对象。但是,对于您的用例来说,这不是理想的解决方案,因为您在内存中仍然有多个对象,并使用单个draw调用来绘制每个对象。

最好通过实例渲染来渲染树状对象,或者将最终对象合并为一个对象。这样,您最终在内存中只有一个对象,并且还可以通过一个draw调用来绘制所有树(这对性能有好处)。使用这两种方法可能需要做一些准备,因此最好研究一下官方示例:

https://threejs.org/examples/webgl_buffergeometry_instancing https://threejs.org/examples/webgl_geometry_minecraft(在此示例中,通过BufferGeometryUtils.mergeBufferGeometries合并了几何图形)

three.js R105