将 envMap 添加到 model.json 材料

Add envMap to model.json materials

我已经使用 blender 将对象导出为 .json 格式以使用 three.js 显示,一切顺利,我手动将所有地图添加到导出文件(导出器不包括但一旦在搅拌机中映射好,手动添加很容易)

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
} );

这能做到吗?如果是,怎么做?

我正在努力解决类似的问题,虽然我无法直接在 JSON 中加载它,但这里的解决方法是在导入期间为所有网格分配它。然后,根据你的 material 反射率,你会在 material 上看到它,或者看不到它:

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 中的 material 属性,只需在顶部添加此 属性。

编辑:这是 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 );
});