如何正确从场景中移除网格?在这个例子中:
removable_items = [];
box = new THREE.Object3D();
scene.add(box);
function add() {
var mesh = new THREE.Mesh( new THREE.IcosahedronGeometry( 10, 5 ), new THREE.MeshPhongMaterial( {color: 0xFFFFFF}) );
box.add( mesh );
removable_items.push(mesh);
//clean(); ///// when is integrated in function memory is cleaned properly
}
function clean() {
if( removable_items.length > 0 ) {
removable_items.forEach(function(v,i) {
v.parent.remove(v);
});
removable_items = null;
removable_items = [];
}
}
function makeExperiment(r) {
var i = 0;
while (i < r) {
add();
i++;
if( r === i ) console.log(r+' finnished ');
}
}
makeExperiment(50);
/// 在那之后,我手动设置了 clean();
场景中的网格不再可见,正如预期的那样,但仍在使用内存,一段时间后会导致内存泄漏和浏览器崩溃。
问题出在哪里?THREE.js 是否制造了其他引用?
THREE.js R73
编辑:当 clean();
在函数中集成(现在在代码中被注释掉)时,内存会被正确清理。但是当我在执行完 makeExperiment();
后手动设置 clean();
时,内存不会被释放。
new THREE.IcosahedronGeometry(1, 5)
第二个参数是细节。将其设置为5会导致大量处理。这是否是您想要回答的问题的一部分?默认值为1。 - dcromleyv.parent.remove(v);
能按预期工作吗? - 2pha