对象遍历在Three.js中意味着什么?

mfa*_*ghi 11 javascript three.js

我试图使用Three.js将obj文件上传到WebGL场景.我看到一些示例代码,如下面的代码很好,但我想知道命令是什么

object.traverse();
Run Code Online (Sandbox Code Playgroud)

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

// 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);
});
Run Code Online (Sandbox Code Playgroud)

小智 14

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

  • 孩子的孩子会叫`object.traverse`吗?如果没有,调用`object.traverse`和`object.child.forEach`或`for`循环有什么区别? (2认同)
  • @Halt是的,将在每个孩子的孩子上调用“object.traverse”。基本上它以深度优先遍历的方式遍历任何给定的三个 js 对象的所有后代。 (2认同)