7
我想使用Three.js将obj文件上传到WebGL场景中。我看到一些示例代码,比如下面的代码很好用,但是我想知道命令是什么Three.js中的对象遍历的含义是什么?
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);
});
因此,我得到这个的方式是:在遍历参数中写入的函数将应用于我们对象的所有子项。对?现在,为了让自己更清楚,如果我们不想使用遍历功能,我们是否应该为场景的每个对象应用我们的函数(用遍历参数编写的函数)并合并所有结果? – mfaieghi
是的,你说得对。 –
对孩子的孩子会叫'object.traverse'吗?如果不是,调用'object.traverse'和'object.child.forEach'或'for'循环之间有什么区别? – Halt