代码之家  ›  专栏  ›  技术社区  ›  webman

将envMap添加到模型。json材料

  •  1
  • webman  · 技术社区  · 9 年前

    我已经用blender将一个对象导出为.json格式,以显示三个。js,一切顺利,我手动将所有地图添加到导出的文件中(导出器不包括这些地图,但一旦在blender中映射好,就可以轻松手动添加)

    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
    }
    

    我需要应用一个环境映射来进行更丰富的反射,通常很容易用三个定义。js和added

    index.html:

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

    这能做到吗?如果是,如何?

    1 回复  |  直到 9 年前
        1
  •  1
  •   webman    9 年前

    我正在努力解决类似的问题,虽然我无法直接将其加载到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 );
    });