在three.js中从场景中完全删除网格的正确方法是什么?

sre*_*enu 4 javascript three.js

如何完全从three.js场景中删除网格而不会导致内存泄漏.我可以发现一次又一次地加载相同的模型导致浏览器崩溃,所以看起来内存没有被释放.

The*_*m01 10

dispose在几何和材质上使用该方法.此外,请确保没有任何内容持有对这些对象的引用,因为这样可以防止垃圾回收.

var myMesh = new THREE.Mesh(geo, mat);
scene.add(myMesh);
//...
scene.remove(myMesh);
myMesh.geometry.dispose();
myMesh.material.dispose();
myMesh = undefined;
Run Code Online (Sandbox Code Playgroud)

  • 提醒:必须在对象的父对象上调用“remove”方法,而不必在主“THREE.Scene”实例上调用(例如,对于 collada 场景中的对象)。使用 myMesh.parent.remove(myMesh) 将确保正确的目标。我还相信调用“renderer.renderLists.dispose()”可能(会?)防止内存泄漏。 (2认同)
  • @TheJim01,我认为你的答案实际上仍然与 Three.js 的当前版本相关。它确实为我指明了解决问题的正确方向(顺便说一句,谢谢你!)。无论如何,我喜欢添加注释,以防其他人在寻找答案时遇到类似的问题(它们不一定针对OP)。干杯。 (2认同)