2013-10-24 4 views
1

Я просмотрел документацию и множество примеров и не смог найти правильный синтаксис для назначения материала либо файлу Collada .dae, либо OBJLoader .obj.Как назначить материал ColladaLoader или OBJLoader

Файлы Json работают правильно при создании Mesh и имеют загрузчик в качестве геометрии и материала в качестве заданного материала.

код, как это работает

var loader = new THREE.JSONLoader(); 
loader.load("modelPath.js", function(geometry){ 
    var material = new THREE.MeshLambertMaterial({color: 0x666666}); 
    mesh = new THREE.Mesh(geometry, material); 
    scene.add(mesh); 
}); 

Это не работает

var loader = new THREE.ColladaLoader(); 
loader.load("modelPath.dae", function(geometry){ 
    var material = new THREE.MeshLambertMaterial({color: 0x666666}); 
    mesh = new THREE.Mesh(geometry, material); 
    scene.add(mesh); 
}); 

И это не работает

var loader = new THREE.OBJLoader(); 
loader.load("modelPath.obj", function(geometry){ 
    var material = new THREE.MeshLambertMaterial({color: 0x666666}); 
    mesh = new THREE.Mesh(geometry, material); 
    scene.add(mesh); 
}); 

Я также попытался geometry.material = new THREE.MeshLambertMaterial({ color: 0xff0000}); внутри function(geometry) без успеха.

. Формат Dae, кажется, сохраняет цвет материала непосредственно из 3D-программ, таких как Cinema. Как я могу правильно установить материал для этих погрузчиков? Если это возможно.

ответ

3

Выполните эту модель для OBJLoader:

var loader = new THREE.OBJLoader(); 

loader.load('model.obj', function (object) { 

    var material = new THREE.MeshLambertMaterial({ color: 0x666666 }); 

    object.traverse(function (child) { 

     if (child instanceof THREE.Mesh) { 

      child.material = material; 

     } 

    }); 

    scene.add(object); 

}); 

Для ColladaLoader, картина аналогична.

var loader = new THREE.ColladaLoader(); 

loader.load('model.dae', function (collada) { 

    var dae = collada.scene; 
    scene.add(dae); 

}); 

Three.js R.62

+0

Я получаю ошибку, 'TypeError: collada.traverse не function' ' collada.traverse (функция (ребенок) { ' – MCSharp

+0

Ссылка на сетке был неправильным в моем коде, ваш ответ является рабочим решением. – MCSharp

Смежные вопросы