2015-08-08 6 views
7

Sto tentando di caricare file obj in una scena WebGL utilizzando Three.js. Ho visto alcuni codici di esempio come quello qui sotto, che funziona alla grande, ma voglio sapere cosa fa il comandoCosa significa "traversa dell'oggetto" in Three.js?

object.traverse(); 

fare? Cosa succederà se non attraversiamo? Grazie.

// 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); 
}); 

risposta

11

È praticamente l'iteratore attraverso l'oggetto caricato. È possibile passare la funzione alla funzione traverse() che verrà chiamata per ogni figlio dell'oggetto che viene attraversato. Se si chiama traverse() sulla scena. attraversi il grafico completo della scena.

+1

Quindi, il modo in cui ottengo questo è: la funzione scritta all'interno dell'argomento trasversale verrà applicata a tutti i figli del nostro oggetto. Destra? Ora, solo per renderlo più chiaro per me stesso, se non vogliamo usare la funzione traversa, dovremmo applicare la nostra funzione (quella scritta in argomenti trasversali) per ogni oggetto della scena e unire tutti i risultati? – mfaieghi

+0

Sì, hai capito bene. –

+2

'object.traverse' sarà chiamato su child of child? In caso contrario, qual è la differenza tra la chiamata di 'object.traverse' e' object.child.forEach', o 'for' loop? – Halt