ThreeJS - 如何在装载的材料上添加环境贴图?

时间:2015-08-12 03:11:33

标签: javascript three.js

您好我是ThreeJS的新手我试图在使用JSON加载器加载的材料之上添加一个环境贴图...这就是我尝试这样做的方式:

var gun = null;
var loader = new THREE.JSONLoader();
loader.load("obj/nissan/nissan-gt-r-nismo.json", function(geometry, materials){

    var mat = new THREE.MeshPhongMaterial({
        color: 0xffffff,
        envMap: cubeMap,
        shininess: 2.0
    });

    materials.push(mat);

    var matface = new THREE.MeshFaceMaterial(materials);

    gun = new THREE.Mesh(geometry, matface);
    gun.scale.set(0.5,0.5, 0.5);
    scene.add(gun);

} );

但是,似乎环境贴图被JSONloader加载的材质所覆盖,(当我删除加载的材质时环境贴图起作用)

另外,使用JSONLoader或ObjectLoader是否更好?

更新:我通过浏览材料清单和设置ENVMAP来修复此问题。

    for(var i = 0; i < materials.length; i++){
        materials[i].envMap = cubeMap;

        if(materials[i].name =="body-paint"){
            materials[i].reflectivity = 0.2;
        }
    }

这是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

是的,您不应为envMap添加新材料,而是将其设置为现有(可能是单个)材质。

当你知道你的JSON就是那种格式时,使用JSONLoader我觉得很好,大多数例子都是这样做的。