2013-04-24 11 views
7

Mam importowanego modelu OBJ z następującego kodu:Przypisywanie materiałów do modelu OBJLoader w Three.js

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

To działa dobrze, ale gdy próbuję dodać materiał do niego, to albo ma brak efektu lub model znika. Zakładam, że mogę to zrobić tak:

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

Ale to nie działa. czy ktoś wie, jak to zrobić, czy jest to możliwe? Próbowałem również używać OBJMTLLoader, ale to po prostu dodaje komplikacji, a jednocześnie nie pozwala mi zmienić materiału.

Odpowiedz

12

Zakładając, że poprawnie zdefiniowane material, spróbuj tego:

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

To działało idealnie! Dzięki za pomoc. –

+0

Jak możemy wpływać na model poza rutynowym ładowaniem? Kiedykolwiek próbuję zmienić to z mojej funkcji renderowania, jest ona niezdefiniowana, nawet gdy przypiszę "obiekt" do zmiennej globalnej (tj. "MyMesh"). – Jackalope

+0

@Jackalope Możesz zmodyfikować zmienną "materiał" tak jak chcesz, a obiekt odpowiednio się zmieni. –