如题,在加载了gltf模型后,想要更换模型中的某个网格的贴图,在使用了官方的方法后,发现材质贴图似乎不匹配原有的网格,以下是不匹配的效果:

更换材质贴图的代码(未修改前):

//纹理贴图加载器TextureLoader
const texLoader = new THREE.TextureLoader();
//src是贴图地址
var texture = texLoader.load(src)
obj.material.map = texture;

原始效果:

贴图材质目标效果(拿blender做测试的效果):

更换后不匹配的效果:

修改代码后,达到的目标效果:

和blender测试的效果基本一致。

下面贴修改后的代码:

//纹理贴图加载器TextureLoader
const texLoader = new THREE.TextureLoader();
//src是贴图地址
var texture = texLoader.load(src)

//以下几个有影响
texture.colorSpace = obj.material.map.colorSpace
texture.flipY = obj.material.map.flipY
texture.repeat = obj.material.map.repeat
texture.wrapS = obj.material.map.wrapS
texture.wrapT = obj.material.map.wrapT

//下面几个不确定,注释了也没影响
texture.name = obj.material.map.name
texture.userData = obj.material.map.userData
texture.version = obj.material.map.version

obj.material.map = texture;

可以看到,就是在替换texture时将texture的部分属性保持和原来的texture属性一致即可。

这是一种方法,如果有更好的方法,欢迎评论留言!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐