![](/img/trans.png)
[英]Problems with raycasting and onMouseClick to remove a mesh from three.js scene
[英]three.js change mesh from scene
我想从一个组中更改一个网格,并按一个按钮。
我正在加载一个外部.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)
但是没有用。
有人知道该怎么做吗?
您可能想要:
var toRemove = scene.getNodeByName ( 'name', true );
if (toRemove !== undefined)
scene.remove ( toRemove );
它将在场景中搜索名为name
的节点,然后从场景中删除结果节点。
我得到一个解决方案:
在我的情况下,我正在使用一个组来加入网格并将所有网格旋转到起始位置。
首先,我必须直接在场景中添加土豆泥。 我不能使其在第二个组上工作。我有一个包含所有网格物体数组的全局变量。 并试图删除使用此引用。 我必须改变这种逻辑。
所以我创建了这个功能:
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将网格旋转到默认位置,我认为我会获得更好的性能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.