Three.js 從記憶體刪除scene中remove的模型資料,釋放記憶體
阿新 • • 發佈:2019-01-01
當需要動態更新顯示不同的模型,從 scene 中 remove 的模型還會在記憶體中,如果多次進行更新操作就會大量佔用記憶體資源,甚至使瀏覽器崩潰,以下程式碼功能為從記憶體中清除模型資料。
程式碼
/**
* 清除模型,模型中有 group 和 scene,需要進行判斷
* @param scene
* @returns
*/
function clearScene(){
// 從scene中刪除模型並釋放記憶體
if(myObjects.length > 0){
for(var i = 0; i< myObjects.length; i++){
var currObj = myObjects[i];
// 判斷型別
if(currObj instanceof THREE.Scene){
var children = currObj.children;
for(var i = 0; i< children.length; i++){
deleteGroup(children[i]);
}
}else{
deleteGroup(currObj);
}
scene.remove(currObj);
}
}
}
// 刪除group,釋放記憶體
function deleteGroup(group) {
//console.log(group);
if (!group) return;
// 刪除掉所有的模型組內的mesh
group.traverse(function (item) {
if (item instanceof THREE.Mesh) {
item.geometry.dispose(); // 刪除幾何體
item.material.dispose(); // 刪除材質
}
});
}
覺得有幫助就點個贊吧!