在自定义材质和Object Three.js上添加纹理
在下面的代码中,我从Marvelous designer导入了对象和材料,我可以使用它们。现在我想在材质和对象上添加纹理(.jpg文件)。我该怎么做在自定义材质和Object Three.js上添加纹理,three.js,textures,texture-mapping,Three.js,Textures,Texture Mapping,在下面的代码中,我从Marvelous designer导入了对象和材料,我可以使用它们。现在我想在材质和对象上添加纹理(.jpg文件)。我该怎么做 const objLoader = new THREE.OBJLoader(); const mtlLoader = new THREE.MTLLoader(); mtlLoader.setMaterialOptions({side:THREE.DoubleSide}); //loaded mat
const objLoader = new THREE.OBJLoader();
const mtlLoader = new THREE.MTLLoader();
mtlLoader.setMaterialOptions({side:THREE.DoubleSide});
//loaded material here
mtlLoader.load( 'mrv_shirt6.mtl', function( materials ) {
materials.preload();
//loaded object here
objLoader.setMaterials( materials );
objLoader.load( 'mrv_shirt6.obj', function ( object ) {
object.position.set( 0, -4.2, 0 );
scene.add( object );
},
// onProgress callback
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
},
// onError callback
function ( err ) {
console.log( 'An error happened' );
});
});
function render(){
requestAnimationFrame(render);
renderer.render(scene,camera);
}
如您所见,我使用导入的材质和对象。现在我想用我的自定义纹理(即.jpg文件)覆盖该材质和对象
我尝试了下面的代码来加载纹理,但它没有像我预期的那样工作:
const objLoader = new THREE.OBJLoader();
const mtlLoader = new THREE.MTLLoader();
mtlLoader.setMaterialOptions({side:THREE.DoubleSide});
mtlLoader.load( 'mrv_shirt6.mtl', function( materials ) {
materials.preload();
objLoader.setMaterials( materials );
objLoader.load( 'mrv_shirt6.obj', function ( object ) {
object.position.set( 0, -4.2, 0 );
// texture
var textureLoader = new THREE.TextureLoader( );
texture = textureLoader.load("kumas/kumas1.jpg");
object.traverse( function ( child ) {
//if ( child.isMesh ) child.material.map = texture;
if ( child.isMesh ) child.material = new THREE.MeshPhongMaterial({
//color: 0x996633,
//specular: 0x050505,
//shininess: my_shine_value,
map: texture,
//side: THREE.DoubleSide
});
} );
scene.add( object );
},
// onProgress callback
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
},
// onError callback
function ( err ) {
console.log( 'An error happened' );
});
});
function render(){
requestAnimationFrame(render);
renderer.render(scene,camera);
}
render();
上面的代码对材质或对象的颜色进行了更改,但我看不到任何图案更改,我的意思是我看不到对象上纹理的图案。我只看到纹理的主颜色应用于对象。例如,物体变成红色、蓝色或粉色。但没有图案或纹理,只有单色变化。
寻找你的想法
谢谢一个合理的猜测是你的。obj模型没有定义顶点uv。嗯,你是伟大的@WestLangley。我不知道什么是UV,但我意识到有一部分是“浓缩UV坐标”,我选择了这些首选项进行了尝试。现在物体的四分之一部分显示纹理。有趣的是,只有右下角的四分之一部分显示了正确的纹理。我正在分享显示正确纹理的图像:另一个合理的猜测是尝试
texture.wrapps=texture.wrapT=THREE.RepeatWrapping代码>@WestLangley你太棒了,这就是解决办法。非常感谢。你建议我读哪本教程?你能和我分享一些与3J、材质和纹理相关的链接吗。我看了一些到三个JS文档,但不知怎么的,它对我来说很复杂。我愿意接受你的建议。谢谢合理的猜测是你的。obj模型没有定义顶点uv。嗯,你是伟大的@WestLangley。我不知道什么是UV,但我意识到有一部分是“浓缩UV坐标”,我选择了这些首选项进行了尝试。现在物体的四分之一部分显示纹理。有趣的是,只有右下角的四分之一部分显示了正确的纹理。我正在分享显示正确纹理的图像:另一个合理的猜测是尝试texture.wrapps=texture.wrapT=THREE.RepeatWrapping代码>@WestLangley你太棒了,这就是解决办法。非常感谢。你建议我读哪本教程?你能和我分享一些与3J、材质和纹理相关的链接吗。我看了一些到三个JS文档,但不知怎么的,它对我来说很复杂。我愿意接受你的建议。谢谢