【问题标题】:What does object traverse mean in Three.js?Three.js 中的对象遍历是什么意思?
【发布时间】:2015-11-01 04:15:38
【问题描述】:

我正在尝试使用 Three.js 将 obj 文件上传到 WebGL 场景中。我看到了一些示例代码,如下所示,效果很好,但我想知道该命令的作用

object.traverse();

做吗?如果我们不进行遍历会发生什么?谢谢。

// prepare loader and load the model
var oLoader = new THREE.OBJLoader();
oLoader.load('models/chair.obj', function(object, materials) {

// var material = new THREE.MeshFaceMaterial(materials);
var material2 = new THREE.MeshLambertMaterial({ color: 0xa65e00 });

object.traverse( function(child) {
if (child instanceof THREE.Mesh) {

  // apply custom material
  child.material = material2;

  // enable casting shadows
  child.castShadow = true;
  child.receiveShadow = true;
  }
  });

  object.position.x = 0;
 object.position.y = 0;
 object.position.z = 0;
 object.scale.set(1, 1, 1);
 lesson6.scene.add(object);
});

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    它基本上是通过您加载的对象的迭代器。您可以将该函数传递给 traverse() 函数,该函数将为被遍历对象的每个子对象调用。如果您在现场调用 traverse()。你遍历完整的场景图。

    【讨论】:

    • 所以,我得到这个的方法是:在 traverse 参数中编写的函数将应用于我们对象的所有子对象。正确的?现在,为了让我自己更清楚,如果我们不想使用遍历功能,我们是否应该对场景的每个对象应用我们的函数(用遍历参数编写的函数)并合并所有结果?
    • object.traverse 会被称为 child 的 child 吗?如果不是,那么调用object.traverseobject.child.forEach,或者for循环有什么区别?
    • @Halt 是的,object.traverse 将被每个孩子的孩子调用。基本上它以深度优先遍历的方式遍历任意给定的三个 js 对象的所有后代。
    • @Harikrishna 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多