Ich versuche Wege zu finden, alle Objekte in einer Szene zu löschen, ohne die Szene selbst zu zerstören. Ich weiß, dass das Benennen des Objekts eine Möglichkeit ist und wenn wir dann das Objekt löschen wollen, "bekommen" wir es einfach mit seinem Namen. Ich möchte jedoch eine schnelle Möglichkeit finden, eine Szene aller Objekte unabhängig von ihren Namen zu löschen. Gibt es einen einfachen Weg, es zu tun? Vielen Dank!Wie lösche ich THREE.JS Szene
Antwort
Sie können die Child-Objekte der Szene durchlaufen und sie einzeln entfernen.
scene.children.forEach(function(object){ scene.remove(object); });
Edit:
Wie in den Kommentaren vorgeschlagen, ist die obige Antwort falsch. Die korrekte Methode zum Entfernen aller Objekte aus der Szene besteht in der Verwendung einer For/While-Schleife.
while(scene.children.length > 0){
scene.remove(scene.children[0]);
}
Hinweis: Dies ist nur ein schnelles und dreckiges Löschen der Objekthierarchie. Wenn Sie dies viel vorhaben, laufen Sie Gefahr, mit dem obigen Code in Speicherlecks einzudringen, weil der Renderer Referenzen auf die Objekte Materialien, Texturen und Geometrien hat. Eine komplette Rein der Szene ist komplizierter und es gibt viele andere Fragen, die in mehr Detail geht:
Ich habe eine prägnante Art und Weise dies zu tun. Ich habe festgestellt, dass die Methode remove
von Object3D mehr als einen Parameter zur Objektentfernung akzeptiert. Dies ermöglicht es uns, das gesamte children
Array zu verwenden, indem der Aufruf modifiziert wird, um jedes Element als einzelne Parameter zu verwenden, indem die integrierte apply
Methode für Funktionen genutzt wird. Dies funktioniert wie folgt:
Verfahre alle Kinder und rufen Sie über ihre Geometrie, Material und Textur verfügen. Der folgende Code ist meine Lösung.
function clearThree(obj){
while(obj.children.length > 0){
clearThree(obj.children[0])
obj.remove(obj.children[0]);
}
if(obj.geometry) obj.geometry.dispose()
if(obj.material) obj.material.dispose()
if(obj.texture) obj.texture.dispose()
}
clearThree(scene)
- 1. Blender three.js Exporteur bricht Szene
- 2. Wie kann ich meine Polygone in einer Three.js-Szene glätten?
- 3. THREE.js Raycasting von einer Kinderkamera zur Szene
- 4. Optimieren Three.JS Renderzeit für eine statische Szene
- 5. Entfernen vieler Objekte aus Three.js Szene langsam
- 6. Wie render die gleiche Szene mit verschiedenen Kameras in three.js?
- 7. Wie kann ich die Position eines Netzes festgelegt, bevor ich es auf die Szene in Three.js
- 8. Eine Szene, aber mehrere Ansichtsfenster mit ihrer eigenen Kamera (three.js)
- 9. Exportieren von Three.js Szene in STL behalten Animationen intakt
- 10. Three.js: Zeige Weltkoordinatenachsen in einer Ecke der Szene
- 11. So behandeln Sie Click-Ereignisse in der three.js-Szene.
- 12. Wie könnte ich eine Three.js-Szene mit einer solchen Beleuchtung und Schattierung (im Anhang) rendern?
- 13. Wie kann ich eine Szene oder ein Modell in das Format GLTF in Three.js exportieren?
- 14. Wie exportiere ich Geometrie aus einer Three.js-Szene als OBJ, die geändert wurde?
- 15. Wie kann ich die Transparenz des JSON-Modells in der Three.js-Szene ändern?
- 16. Wie kann ich von Szene zu Szene zurückkehren?
- 17. Wie lösche ich JTextArea?
- 18. Three.js - Geometrie übereinander
- 19. Wie verwische ich eine Szene in SpriteKit?
- 20. Wie lösche ich mehrere Zeilen?
- 21. Wie lösche ich einen Edelsteinpfad?
- 22. Wie lösche ich Dateien programmatisch?
- 23. Wie lösche ich einen Verfügbarkeitssatz?
- 24. Wie lösche ich den Navigationsstapel?
- 25. Wie lösche ich den Standardkonstruktor?
- 26. Wie lösche ich wirklich Vektoren
- 27. Wie lösche ich eine Zeichenfolge?
- 28. Wie lösche ich ein Wörterbuch?
- 29. Wie lösche ich einen Kontakt?
- 30. Wie lösche ich eine Prozessbefehlszeile?
diese Lösung ist falsch, weil Sie über Array sind laufen, die in der Schleife modifiziert, so dass einige Elemente übersprungen werden kann (zB wenn Sie zwei Elemente in Kinder haben), ersetzen Sie bitte mit: '' 'while (Szene .children.length> 0) { scene.remove (scene.children [0]); } '' ' – Alleo