2013-10-24 24 views
1

我查看了文檔以及許多示例,但無法找到將材質分配給Collada .dae或OBJLoader .obj文件的正確語法。如何分配材料到ColladaLoader或OBJLoader

當創建Mesh並將裝載程序作爲幾何體和材質作爲設置材質時,Json文件似乎可以正常工作。

這樣的代碼工作

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格式似乎直接從Cinema等3D程序中保留材質顏色。我如何正確設置這些裝載機的材料?如果這甚至是可能的。

回答

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

我得到的錯誤,'類型錯誤:collada.traverse不是function' 'collada.traverse(函數(子){' – MCSharp

+0

到網參考在我的代碼中是不正確的,你的答案是一個工作解決方案。 – MCSharp