Sto cercando di trovare modi per cancellare tutti gli oggetti in una scena senza distruggere la scena stessa. So che nominare l'oggetto è un modo e poi quando vogliamo eliminare l'oggetto, lo "prendiamo" semplicemente con il suo nome. Tuttavia, voglio trovare un modo rapido per cancellare una scena di tutti gli oggetti in essa contenuti, indipendentemente dal loro nome. C'è un modo semplice per farlo? Grazie!Come eliminare la scena THREE.JS
risposta
È possibile attraversare gli oggetti figlio della scena e rimuoverli uno ad uno.
scene.children.forEach(function(object){ scene.remove(object); });
Edit:
Come suggerito nei commenti, la risposta di cui sopra è sbagliato. Il modo corretto per rimuovere tutti gli oggetti dalla scena utilizza un ciclo for/while.
while(scene.children.length > 0){
scene.remove(scene.children[0]);
}
Nota: questa è solo una rapida e sporca cancellazione della gerarchia degli oggetti. Se hai intenzione di farlo molto, rischi di correre alle fughe di memoria con il codice sopra perché il renderer ha riferimenti agli oggetti materiali, trame e geometrie. Una pulizia della scena è più complicato e ci sono molte altre domande che va in modo più dettagliato:
Ho un più conciso modo di farlo. Ho notato che il metodo remove
di Object3D accetta più di un parametro per la rimozione degli oggetti. Ciò ci consente di utilizzare l'intero array children
modificando la chiamata per utilizzare ciascun elemento come singoli parametri sfruttando il metodo integrato apply
per le funzioni. Questo funziona in questo modo:
scene.remove.apply(scene, scene.children);
Attraversando tutti i bambini e chiamare smaltire il loro geometria, materiali e texture. Il codice qui sotto è la mia soluzione.
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. Piano infinito in scena THREE.JS
- 2. Come rendere la stessa scena con telecamere diverse in three.js?
- 3. Esportare la scena Three.js in STL mantenendo intatte le animazioni
- 4. Visualizza la scena a una risoluzione più bassa in three.js
- 5. Utilizzo delle matrici per trasformare il grafico di scena Three.js
- 6. Three.js: Mostra gli assi delle coordinate mondiali nell'angolo della scena
- 7. THREE.js Raycasting da una telecamera per bambini alla scena
- 8. Come utilizzare la fotocamera come immagine texture in Three.js
- 9. Utilizzo di clojurescript per visualizzare la scena Three.js su una pagina HTML
- 10. Three.js - Geometria sopra un'altra
- 11. Come esportare una scena THREE.JS in una trama a 360 per photosphere
- 12. Come verificare se un oggetto è presente nella scena o non in THREE.js?
- 13. Materiale riflettente in THREE.js
- 14. Three.js - Larghezza di visualizzazione
- 15. Qualità dell'ombra Three.js in Chrome/MacOS?
- 16. Sistema GUI per three.js
- 17. Ruota la fotocamera in Three.js con il mouse
- 18. Consenti il controllo del mouse della scena three.js solo quando il mouse è su tela
- 19. Perché la luce in questa scena non funziona?
- 20. Rileva oggetto cliccato in THREE.js
- 21. Three.js come dissolvenza audio?
- 22. Three.js shadows - come migliorare?
- 23. utilizzando three.js JSONLoader
- 24. Come eliminare la connessione jsPlumb
- 25. FirebaseStorage: Come eliminare la directory
- 26. Imposta la larghezza e l'altezza della scena
- 27. Conversione doppia a int dietro la scena?
- 28. Renderer THREE.js
- 29. Come rendere visibile la vista sulla scena dock di Storyboard?
- 30. three.js come creare oggetti bifacciali
questa soluzione non è corretto, perché si sta iterazione di serie che ha modificato in loop, in modo da alcuni elementi possono essere saltati (per esempio quando si hanno due elementi nei bambini), si prega di sostituire con: '' 'while (scena .children.length> 0) { scene.remove (scene.children [0]); } '' ' – Alleo