有很多练习,如何销毁整个 THREE.js场景。 我尝试了所有这些。我仍然无法从Web浏览器的RAM使用中删除场景。这让我成了问题。使用THREE.js生成具有所需性能效果的场景,以创建简单的快照(场景不是动画的)。之后我需要删除所有场景数据。最终我可以做很多次,这就是为什么我需要从浏览器内存中完全删除场景。但实际上我在所有浏览器和我以前用于测试的所有机器都没有性能依赖性的内存泄漏。
这就是我删除场景的方法:
THREEEnemyShipScene.clearScene = function (obj) {
if (obj instanceof THREE.Mesh && obj.type == "Mesh")
{
obj.geometry.dispose();
obj.geometry = null;
obj.material.dispose();
obj.material = null;
scene.remove( obj ),
obj = null;
}
else
{
if (obj.children !== undefined) {
while (obj.children.length > 0) {
this.clearScene(obj.children[0]);
obj.remove(obj.children[0]);
}
}
}
};
THREEEnemyShipScene.remove = function () {
THREEEnemyShipScene.clearScene(THREEEnemyShipScene.scene);
THREEEnemyShipScene.renderer = null;
THREEEnemyShipScene.scene = null;
THREEEnemyShipScene.canvas = null;
THREEEnemyShipScene.camera = null;
THREEEnemyShipScene.light = null;
THREEEnemyShipScene.render = null;
THREEEnemyShipScene.shipBox = null;
THREEEnemyShipScene.corplogo = null;
THREEEnemyShipScene.ModelLength = null;
THREEEnemyShipScene.postprocessing.scene = null;
THREEEnemyShipScene.postprocessing.bokeh_uniforms = null;
THREEEnemyShipScene.postprocessing.camera = null;
THREEEnemyShipScene.postprocessing.materialBokeh = null;
THREEEnemyShipScene.postprocessing.quad = null;
THREEEnemyShipScene.postprocessing.rtTextureColor = null;
THREEEnemyShipScene.postprocessing.rtTextureDepth = null;
THREEEnemyShipScene.postprocessing = null;
}
之后删除了场景,但仍然分配了浏览器内存。等待垃圾收集器5分钟后,内存仍未释放。
据我所知,我需要删除对象的所有引用以完全删除它。我做错了什么?有没有更好的想法从场景中释放场景和场景儿童?