2013-04-24 9 views
7

ho importato un modello OBJ con il seguente codice:materiali assegnando a un modello OBJLoader in Three.js

var loader = new THREE.OBJLoader(); 
loader.addEventListener('load', function (geometry) { 
    object = geometry.content; 
    scene.add(object); 
}); 
loader.load('ship.obj'); 

Funziona bene, ma ogni volta che provo ad aggiungere un materiale ad esso, sia ha nessun effetto o il modello scompare. Ho pensato che potevo farlo in questo modo:

var ship = new THREE.Mesh(object, material); 

Ma questo non funziona. qualcuno sa di un modo per farlo, o se è addirittura possibile? Ho provato anche a usare OBJMTLLoader, ma aggiunge solo complicazioni pur non permettendomi di cambiare il materiale.

risposta

12

Supponendo di aver correttamente definito material, provate questo:

loader.addEventListener('load', function (event) { 

    var object = event.content; 

    object.traverse(function (child) { 

     if (child instanceof THREE.Mesh) { 

      child.material = material; 

     } 

    }); 

    scene.add(object); 

}); 
+0

Che ha funzionato perfettamente! Grazie per l'aiuto. –

+0

Come possiamo influire sul modello al di fuori della routine di caricamento? Ogni volta che provo ad alterarlo dalla mia funzione render, non è definito, anche quando assegno 'object' a una variabile globale, (ad esempio 'myMesh'). – Jackalope

+0

@Jackalope È possibile modificare la variabile "materiale" come desiderato in seguito e l'oggetto cambierà di conseguenza. –

Problemi correlati