我想移除场景中的一些圆柱体,以便我可以将新的圆柱体放在另一个位置。
这就是我放置圆柱体的方式(这只是为了让您了解我想要做什么)。
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>
最佳答案
如果你想使用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' ) );
此外,如果您的 Material 和几何体具有相同的属性,请考虑在创建圆柱体网格时重复使用它们。只需在 for
循环之外声明它们。否则,您应该使用相应的 .dispose()
方法,以便在移除气缸时释放引擎的内部资源。看看https://stackoverflow.com/a/40730686/5250847了解更多详情。
three.js R103
关于javascript - 如何从场景中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55470625/