Three.js - 从头重新加载场景
Three.js - Reload Scene from start
我正在创建某种可视化编辑器:我是 adding/deleting/transforming 个对象。
我的初始场景只有一个平面作为地板 (5000x5000)。
我希望能够从头开始 "reload" 场景,也就是说通过单击按钮 "New".
删除地板以外的所有内容
怎么可能?
您可以遍历场景对象,检查那里有哪些对象,然后将其删除。如果有一些您想要保留的网格,请为它们设置一个属性或名称并检查该名称。
以下示例函数 clearScene()
从场景中删除所有 keepMe
- 属性 设置为 false 的网格 或 根本没有 :
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/
基于@gaitat
answer 的删除错误修复
我正在创建某种可视化编辑器:我是 adding/deleting/transforming 个对象。
我的初始场景只有一个平面作为地板 (5000x5000)。
我希望能够从头开始 "reload" 场景,也就是说通过单击按钮 "New".
删除地板以外的所有内容怎么可能?
您可以遍历场景对象,检查那里有哪些对象,然后将其删除。如果有一些您想要保留的网格,请为它们设置一个属性或名称并检查该名称。
以下示例函数 clearScene()
从场景中删除所有 keepMe
- 属性 设置为 false 的网格 或 根本没有 :
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/
基于@gaitat
answer 的删除错误修复