three.js从场景改变网格

时间:2014-07-02 13:37:07

标签: javascript three.js

我想从一个组中更改一个网格,并按一个按钮。

我正在加载外部.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),但没有效果。

有人知道怎么做吗?

2 个答案:

答案 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将网格旋转到默认位置,我认为我会有更好的性能