2016-12-05 53 views
1

我已經使用blender將對象導出爲.json格式以便與three.js一起顯示,一切順利,我手動將所有貼圖添加到導出的文件(不包括導出器,但是一次在容易手動添加混合器)映射以及將envMap添加到model.json材質

model.json:

"materials":[{ 
    "DbgColor":15658734, 
    "DbgIndex":0, 
    "DbgName":"FrontCol", 
    "blending":"NormalBlending", 
    "shading":"phong", 
    "colorDiffuse":[1.0,1.0,1.0], 
    "mapDiffuse" : "model_d.png", 
    "mapDiffuseWrap" : ["repeat", "repeat"], 
    "colorSpecular":[0.8,0.4,0.0], 
    "mapSpecular" : "model_s.jpg", 
    "mapBump" : "model_b.jpg", 
    "mapBumpScale" : 4 
} 

我需要應用environmap更豐富的反射,通常很容易與three.js所定義並添加

的index.html:

var material = new THREE.MeshPhongMaterial({ 
    envMap: mapEnvironment 
}); 

可以這樣做?如果是,如何?

回答

1

我正在努力尋找類似的東西,雖然我無法直接在JSON中加載它,但這裏的解決方法是在導入過程中爲所有網格指定它。然後,根據你的材料的反射率,你會看到它的材料,或不:

var objectLoader = new THREE.ObjectLoader(); 
objectLoader.load("file.json" , function (obj) { 
    obj.traverse(function (child) { 
     if (child instanceof THREE.Mesh) {  

      child.material.envMap = mapEnvironment; 

         } 
    }); 

這使從JSON你的材料特性,只是增加了在上面這個屬性。

編輯:這裏的版本爲JSONLoader:

var loader = new THREE.JSONLoader(); 
loader.load('file.json', function (geometry, materials) { 
    for (var k in materials) { 
     materials[k].envMap = mapEnvironment;  
    } 

    mesh = new THREE.Mesh(geometry, new THREE.MultiMaterial(materials)); 
    scene.add(mesh); 
}); 
+0

我試圖在飛行中,我使用THREE.JSONLoader並用,我無法得到它的工作,使用THREE.ObjectLoader又一次代碼既不(它打破了渲染)...我仍然是在開始... – webMan

+0

好吧,這是與JSON加載器。我不確定你使用的是什麼樣的裝載機。 – user3698985

+0

'var \t loader = new THREE.JSONLoader(); \t \t \t \t Loader.load方法( 'file.json',函數(幾何形狀,材料){ \t \t \t \t \t在材料(VAR k)的{ \t \t \t \t \t \t材料[K]。 skinning.envMap = mapEnvironment; \t \t \t \t \t} \t \t \t \t \t mesh = new THREE.Mesh(geometry,new THREE.MultiMaterial(materials)); \t \t \t \t \t \t \t \t \t \t \t \t \t \t scene.add(目); \t \t \t \t \t \t \t \t \t});' – user3698985

相關問題