2016-02-06 88 views
1

你好,我想弄清楚如何添加一個MTL文件到我的OBJ three.js。我有我的OBJ加載,並回來解決這個問題。現在,當我添加使用MTLLoader加載的MTL文件的代碼時,它並沒有通過mtlLoader.load(url, ....)(正如在添加了這一點代碼之後,現在只有場景內沒有任何東西被渲染)。我正在使用警報來跟蹤代碼的進度,並在此聲明之前收到警報,但未收到警報。我發現的所有解決方案都包括使用OBJMTLLoader,它不再是當前版本的three.js(r74)的一部分。如何在three.js中添加一個MTL紋理到OBJ

+0

不確定爲什麼OBJMTLLoader已從r74示例中刪除,但沒有任何東西阻止您查看它如何使用MTLLoader加載紋理,只需[查看源代碼這裏](https://github.com/mrdoob/three.js/blob/r73/examples/js/loaders/OBJMTLLoader.js)。或者,甚至可能仍然使用OBJMTLLoader類,如果它仍然工作在r74 – 2pha

+0

[這是提交](https://github.com/mrdoob/three.js/commit/ad41d295eeb6cb77cb56e931fea881fe71fcb6ab#diff-12ac5f8fb38da21d5a5eaa89ee22f155),刪除OBJMTLLoader和[這裏是問題](https://github.com/mrdoob/three.js/pull/7524) – 2pha

回答

3

此代碼是從加載OBJ + MTL正式例如採取:

objLoader.setMaterials(materials);

var mtlLoader = new THREE.MTLLoader(); 
mtlLoader.setBaseUrl('obj/male02/'); 
mtlLoader.setPath('obj/male02/'); 
var url = "male02_dds.mtl"; 
mtlLoader.load(url, function(materials) { 

    materials.preload(); 

    var objLoader = new THREE.OBJLoader(); 
    objLoader.setMaterials(materials); 
    objLoader.setPath('obj/male02/'); 
    objLoader.load('male02.obj', function (object) { 

     object.position.y = - 95; 
     scene.add(object); 

    }, onProgress, onError); 

}); 

http://threejs.org/examples/#webgl_loader_obj_mtl

你可以通過現在分配材料到OBJ如果你想操縱這些材料,mtlLoader在回調中給你的是一個的實例。例如,您可以通過materials.getAsArray()獲取材料。查看所有可能函數的源代碼:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/MTLLoader.js#L138-L417

+0

我目前正試圖執行此代碼。在發佈之前我曾嘗試過,但我的問題仍然存在。我已經提出了一個警告聲明,看看是否正在創建一個MTLLoader(是),但是我在'mtlLoader.load(url,function(materials){'但是它永遠不會達到這個聲明之後直接在行上放置一個警告ststement。 – RPBruiser

+0

有必要設置基本Url和Path,然後用* only *模型名稱調用加載程序。可能是您的mtl文件存在問題,您可以嘗試加載隨three.js一起提供的model + mtl文件使用你的代碼,看看會發生什麼 –

+0

我的mtl沒有問題,我已經在多個3D模型查看器中打開它,並且它們全部都沒問題。 – RPBruiser