您好我是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;
}
}
这是最好的方法吗?
答案 0 :(得分:0)
是的,您不应为envMap添加新材料,而是将其设置为现有(可能是单个)材质。
当你知道你的JSON就是那种格式时,使用JSONLoader我觉得很好,大多数例子都是这样做的。