Javascript 在three.js中更改obj模型材质
我在blender中创建了一个带有UV贴图的3D模型。我应用UV贴图的方式是,纹理仅应用于模型的一侧。我将模型导出为Javascript 在three.js中更改obj模型材质,javascript,three.js,texture-mapping,uv-mapping,Javascript,Three.js,Texture Mapping,Uv Mapping,我在blender中创建了一个带有UV贴图的3D模型。我应用UV贴图的方式是,纹理仅应用于模型的一侧。我将模型导出为obj和mtl。当我在three.js上导入此模型时,它会按预期工作,加载程序会自动应用mtl文件中定义的图像作为纹理 现在我想在three.js中以编程方式更改此纹理。模型有多种材质(我认为这是因为有多个面)。如何重新应用材质以保持UV贴图并仅更改应用的纹理?我想对模型应用map和envMap var m = new THREE.Me
obj
和mtl
。当我在three.js
上导入此模型时,它会按预期工作,加载程序会自动应用mtl
文件中定义的图像作为纹理
现在我想在three.js
中以编程方式更改此纹理。模型有多种材质(我认为这是因为有多个面)。如何重新应用材质以保持UV贴图并仅更改应用的纹理?我想对模型应用map
和envMap
var m = new THREE.MeshPhongMaterial({
envMap: cubemap,
reflectivity: 0.9
});
var m2 = new THREE.MeshPhongMaterial({
envMap: cubemap,
color: parseInt(material.color, 16),
reflectivity: 0.9,
map: THREE.ImageUtils.loadTexture('/textures/uv_checker large.png')
});
loadedMesh.material = [m,m,m,m,m,m2,m2,m2,m];
经过一些尝试和错误后,使用m
和m2
位置。纹理已应用,但最终看起来与原始纹理不同。我有一些小的空白,甚至纹理的地方,我不应该有纹理,因为我的UV映射
我该怎么做呢?好的,我找到了一个方法。我不知道这是否适用于所有模型,但我用另一种纹理替换了所有具有
贴图
纹理的材质,并用另一种不同的材质替换了所有其他材质。它工作得很好,紫外线贴图仍然在那里
var m1 = new THREE.MeshPhongMaterial({map: texture, ...});
var m2 = new THREE.MeshPhongMaterial({...});
for(var n = 0; n < model.material.length; ++n) {
if(model.material[n].map) model.material[n] = m1;
else model.material[n] = m2;
}
var m1=new THREE.MeshPhongMaterial({map:texture,…});
var m2=新的三点网格材质({…});
对于(变量n=0;n
我从不使用OBJMTLLoader,因为我过去遇到过问题,我会使用OBJLLoader加载模型,然后单独创建材质。