如何从场景中删除对象

时间:2019-04-02 08:53:03

标签: javascript three.js

我想删除现场的一些圆柱体,以便可以将新的圆柱体放在另一个位置。

这就是我放置气瓶的方式(这只是显示出来,以便您了解我要做什么)。

for (i = 0; i < aantalLangs; i++) { 

var geometry = new THREE.CylinderGeometry( (langsDiameter * scale), (langsDiameter * scale) , langsLengte * scale , 20 );
var material = new THREE.MeshBasicMaterial( {color: 0xffe26f} );
var cylinder = new THREE.Mesh( geometry, material );

scene.add( cylinder );

cylinder.position.set( 0 , 0 ,onderRandRooster);
onderRandRooster -= (langsMaas * scale);
cylinder.rotation.z = Math.PI / 2;
}

我使用此功能将其删除。

function ClearMesh(){
scene.remove(scene.getObjectByName(cylinder));
scene.remove(scene.getObjectByName(cylinder2));
}

我想使用此按钮来移除气瓶。

<button onclick="ClearMesh();">Clear mesh</button>

1 个答案:

答案 0 :(得分:1)

如果要使用Object3D.getObjectByName(),则必须应用字符串作为参数。更确切地说,您目前未在应用程序中设置的Object3D.name。这样的事情应该起作用:

// in your for loop

var cylinder = new THREE.Mesh( geometry, material );
cylinder.name = 'cylinder' + i;

// in your ClearMesh() function

scene.remove( scene.getObjectByName( 'cylinder1' ) );

此外,如果圆柱体网格具有相同的属性,请考虑在创建它们的圆柱体网格时重新使用它们的材料和几何形状。只需在for循环之外声明它们即可。否则,您应该使用相应的.dispose()方法,以便在卸下气缸时释放引擎的内部资源。请查看https://stackoverflow.com/a/40730686/5250847,了解更多详细信息。

three.js R103