Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript three.js如何在mtl、obj文件上映射纹理_Javascript_Three.js_Mapping - Fatal编程技术网

Javascript three.js如何在mtl、obj文件上映射纹理

Javascript three.js如何在mtl、obj文件上映射纹理,javascript,three.js,mapping,Javascript,Three.js,Mapping,我正在尝试将png文件映射到mtl,obj文件 映射之前 但是映射之后,mtl纹理就消失了 映射后 我该怎么办? 我的英语不好。如果你不明白我的问题,请留下评论 这是我的代码: var onProgress = function(xhr) { var percentComplete = xhr.loaded / xhr.total * 100; console.log(Math.round(percentComplete, 2

我正在尝试将png文件映射到mtl,obj文件

映射之前

但是映射之后,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恤上

谢谢你的回答,我试过了,但这不是我想做的


您已将相同的“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;
                    }
                 }
             }
          });