如何在three.js中访问场景的元素

时间:2014-05-30 16:07:59

标签: javascript three.js

我想访问场景中的所有元素。这些元素是类型的对象:THREE.Object3D,THREE.Mesh,依此类推。有些元素有一个名为 children 的字段,这是一个其他元素的数组。所以我们可以得出结论,场景(也有字段)是一棵树。

有了这些知识,我想对场景对象中存在的每个元素执行深度优先搜索访问,为其设置一些属性。这是我的代码:

function setShadowRenderer( element ) {

   element.receiveShadow = true;
   element.castShadow = true;

   if ( element.children !== undefined ||
      element.children !== [] )
      for ( i = 0; i < element.children.length; i++ )
        setShadowRenderer( element.children[ i ] );

    console.log( C++ );
}

现在,这段代码导致了无限的计算,它永远不会结束。这怎么可能?

1 个答案:

答案 0 :(得分:0)

我认为这将完成你想要的工作:

if (object instanceof THREE.Object3D)
{
    object.traverse (function (mesh)
    {
        if (! (mesh instanceof THREE.Mesh)) return;

        mesh.castShadow = true;
        mesh.receiveShadow = true;

    });
}