Three.js: (alle) Objekte entfernen

Pitfalls

Geometries und Materials werden nicht automatisch entfernt, wenn deren Variablen überschrieben werden oder das Mesh, das aus den beiden gebildet wird, aus der Szene entfernt wird. Wenn man nicht dran denkt und nur den Mesh löscht, kann das bei 60 Frames/Sekunde ziemlich schnell den RAM auffressen. Wir hatten das schon konkret beobachtet, kurz vor dem RAM-Obergrenze ist der Chrome abgestürzt. In der offiziellen Doku wird dieses Verhalten bestätigt. Heisenbugs und schwieriges Debugging mit viel Aufwand sind hierbei eine reale Gefahr.

Lösung: Immer dieselben Geometries und Materials wiederverwenden oder explizit disposen.

Objekt entfernen

Quelle: https://stackoverflow.com/a/43969571/1777526

remove entfernt Objekte immer nur von deren parent!

function removeObject(object) {
        var selectedObject = scene.getObjectByName(object.name);
        selectedObject.parent.remove( selectedObject );
    }

Aufruf:

removeObject(scene.getObjectByName("myName"));

Alle Sub-Objekte der Szene entfernen

Quelle: https://stackoverflow.com/a/29418147/1777526

Vorsicht: das entfernt nicht alle Objekte einer Szene rekursiv.

function removeAllObjects()  {
   for( var i = scene.children.length - 1; i >= 0; i--) { 
     obj = scene.children[i];
     scene.remove(obj);
   }
}

Aufruf:

removeAllObjects();

Tags: löschen