繁体   English   中英

three.js从场景更改网格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM