我正在尝试在mtl,obj文件
上映射png文件在映射之前
但是在映射之后,mtl纹理就会消失。
映射后
我该怎么办? 我英语说的不好。如果您无法理解我的问题,请发表评论。
这是我的代码:
var onProgress = function(xhr) {
var percentComplete = xhr.loaded / xhr.total * 100;
console.log(Math.round(percentComplete, 2) + '% downloaded');
};
var onError = function(xhr) {};
THREE.Loader.Handlers.add(/\.dds$/i, new THREE.DDSLoader());
var loader = new THREE.ImageLoader();
loader.load("../img/ang.png", function(image) {
texture.minFilter = THREE.LinearFilter;
texture.image = image;
texture.wrapS = THREE.ClampToEdgeWrapping;
texture.wrapT = THREE.ClampToEdgeWrapping;
texture.offset.set(-3, -9.5);
texture.repeat.set(13, 13);
texture.needsUpdate = true;
},onProgress,onError);
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath('../models/');
mtlLoader.load('nag-green.mtl', function(materials) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.setPath('../models/');
objLoader.load('nag-green.obj', function(object) {
object.traverse(function(child) {
if (child instanceof THREE.Mesh) {
child.material.map = texture;
}
});
object.name = "object";
object.position.y = 0;
scene.add(object);
}, onProgress, onError);
});
我想要做的是将'ang.png'文件映射到像这样的T恤上
谢谢你的回答Radio,我试过这种方式,但这不是我想做的。
答案 0 :(得分:0)
你已经应用了相同的' ang.png'纹理到所有子网格。我认为在遍历函数中需要一个条件才能将纹理仅应用于需要纹理的网格部分。
mtl应该在首次加载时为材质应用名称。例如,在这里我假装材料名称是"躯干"。原始3d编辑器中的导出器会给它一些其他名称。在任何情况下,您都应该能够在条件中查询名称:
object.traverse(function(child) {
if (child instanceof THREE.Mesh) {
if(child.material != undefined){
if(child.material.name=="torso"){
child.material.map = texture;
}
}
}
});