我想从一个组中更改一个网格,并按一个按钮。
我正在加载外部.obj文件:
loader.load( obj, function ( object ) {
createScene( object, mod.tipo, pid, cor.replace("#","0x") );
});
并添加一个组
function createScene( geometry, name, id, cor ) {
geometry.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
var material = new THREE.MeshPhongMaterial( {
specular: 0xffffff,
shininess: 10,
side: THREE.DoubleSide,
map: THREE.ImageUtils.loadTexture('/3d/js/texturas/white.jpg'),
shading: THREE.SmoothShading
} );
material.color.setHex(cor);
child.material = material;
group.add( child );
}
并在场景中添加此群组:scene.add( group )
更改我将网格的可见性设置为false。但是想要从场景和小组中删除它。
我已尝试scene.remove('name')
和scene.remove(mesh)
,但没有效果。
有人知道怎么做吗?
答案 0 :(得分:1)
你可能想要:
var toRemove = scene.getNodeByName ( 'name', true );
if (toRemove !== undefined)
scene.remove ( toRemove );
在场景中搜索名为name
的节点,然后从场景中删除生成的节点。
答案 1 :(得分:0)
我得到了一个解决方案:
在我的情况下,我使用一个组来加入网格并将它们全部旋转到开始位置。
首先我必须直接在场景中添加捣蛋。我无法让它在一个小组上工作 其次,我有一个包含所有网格数组的全局变量。并且正如删除使用此引用。我必须改变这种逻辑。
所以我创建了这个函数:
var clearScene = function(name){ var objsToRemove = scene.children;
for (var t = 0; t<objsToRemove.length; t++){
if (objsToRemove[t] instanceof THREE.Mesh) {
if (objsToRemove[t].name = name) {
scene.remove(objsToRemove[t]);
break;
}
}
}
}
它继续每个网格寻找我想要删除的mashe。并简单地调用移除场景。
这适合我。
我必须改变我的组逻辑并通过mashe将网格旋转到默认位置,我认为我会有更好的性能