2015-10-21 1 views
0

Я создаю визуальный редактор: я добавляю/удаляю/преобразую объекты.Three.js - Reload Сцена с начала

Моя первоначальная сцена имеет только плоскость как пол (5000x5000).

Я хочу, чтобы «перезагрузить» сцену с начала, то есть удалить все, кроме пола, нажав кнопку «Новый».

Как это возможно?

ответ

1

Вы можете пересечь объект сцены, проверить, какие у вас есть объекты, а затем удалить их. Если есть некоторые Meshes, которые вы хотите сохранить, укажите для них атрибут или имя и также проверьте это имя.

Следующий пример функции clearScene() удаляет по вызову все меши из сцены, которые имеют keepMe - атрибут набор для ложных или не имеют один вообще:

floor = new THREE.Mesh(/* ... */); 
floor.userData = { keepMe: true }; 

// ... 

function clearScene() { 
    var to_remove = []; 

    scene.traverse (function(child) { 
     if (child instanceof THREE.Mesh && !child.userData.keepMe === true) { 
      to_remove.push(child); 
     } 
    }); 

    for (var i = 0; i < to_remove.length; i++) { 
     scene.remove(to_remove[i]); 
    } 
} 

Jsfiddle: http://jsfiddle.net/L0rdzbej/138/

Исключение-исправление на основе этого answer от @gaitat

+0

Извините, но он не удаляет все сетки. Он удаляет некоторые из них. :/ – sRcBh

+0

Он удаляет только первый, третий, пятый ... И я получаю сообщение об ошибке: 'TypeError: б [с] не определена \t ... б = this.children, с = 0, D = b.length, c sRcBh

+0

Ops, мой тестовый файл не был достаточно сложным, я проверю это :-) –

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