2014-01-25 64 views
11

我正在使用OBJLoader.js。我有一個按鈕,點擊時從場景中移除一個3d模型並添加一個新模型,但是每次加載模型時,chrome中的內存使用量將增加約50 MB,並且不會減少。我嘗試過「處理()」和null,但沒有太多的用處。有一個動畫函數每秒都會調用渲染器渲染場景。three.js ObjLoader內存增加

function freeMemory(model) { 
if (model instanceof THREE.Mesh) { 
    var texMat = model.material; 
    texMat.map.dispose(); 
    texMat.map = null; 
    texMat.dispose(); 
    texMat = null; 
    model.geometry.dispose(); 
    model.geometry = null; 
    model = null; 
} 
} 

function loadModel() { 
scene.remove(model); 
freeMemory(model); 
var loader = new THREE.OBJLoader(); 
loader.load('test3d.obj', function(object) { 
    object.children[0].geometry.computeFaceNormals(); 
    geometry = object.children[0].geometry; 
    console.log(geometry); 
    geometry.dynamic = true; 
    var modelTexture = THREE.ImageUtils.loadTexture("models/tex_0.jpg"); 
    object.traverse(function(child) { 
     if (child instanceof THREE.Mesh) { 
      child.material.map = modelTexture; 
      model = child; 
      model.scale.set(0.5, 0.5, 0.5); 
      model.translateOnAxis(new THREE.Vector3(1, 0, 1).normalize(), 
        1.5); 
      model.rotation.x = 0; 
      model.rotation.y = 0; 
      model.rotation.z = 0; 
      modelInitialPositionX = model.position.x; 
      modelInitialPositionY = model.position.y; 
      modelInitialPositionZ = model.position.z; 
      scene.add(model); 
     } 
    }); 
    modelTexture.dispose(); 
    modelTexture = null; 
}); 
loader = null; 
} 

我有任何最佳做法,我可以使用添加和刪除按鈕點擊.obj和紋理。

+0

http://stackoverflow.com/a/33199591/1980846 – gaitat

回答

0

嘗試停止動畫,用下面的代碼:

animate(){ 
    this.requestId = requestAnimationFrame(this.animate.bind(this)); 
    this.render(); 
} 
render(){ 
    this.renderer.render(this.scene, this.camera); 
} 
stop(){ 
    window.cancelAnimationFrame(this.requestId); 
}