2016-01-28 3 views
3

Я передаю имя 3d модели добавить и имя текстуры в функции , и в результате 3D-модель визуализируется в сцене. Все, что я в застрял, я просто хочу, чтобы удалить только 3D объекты из сценыКак удалить все объекты Mesh из сцены в three.js?

, когда я использую scene.children, чтобы получить объекты, которые он содержит свет и камеру слишком я просто хочу, чтобы удалить только меш в сцене

ответ

2

Может быть, это решает проблему,

for (let i = scene.children.length - 1; i >= 0; i--) { 
    if(scene.children[i].type === "Mesh") 
     scene.remove(scene.children[i]); 
} 

Обратите внимание, что обратный цикл. Это происходит потому, что мы удаляем элементы из массива, который мы итерируем, и нам нужно сохранить индексы.

1

Удаление трех объектов из вашей сцены недостаточно, чтобы удалить их из памяти. Вы должны вызвать методы dispose() для геометрии объектов, материалов и текстур.

https://github.com/mrdoob/three.js/issues/5175

После вы называете Dispose и удалить методы, сделать диагностику, как это (где this.renderer ваш THREE.Renderer):

if (this.renderer && (this.renderer.info.memory.geometries || this.renderer.info.memory.programs || this.renderer.info.memory.textures)) { 
    loge("geometries=" + this.renderer.info.memory.geometries + " programs=" + this.renderer.info.memory.programs + " textures=" + this.renderer.info.memory.textures); 
} 

Если число программ, геометрии и текстуры нестабильны, вы вызываете проблемы с производительностью и утечку памяти.

Смежные вопросы