Three.js MTLLoader()仅加载第一个对象颜色?

Three.js MTLLoader()仅加载第一个对象颜色?,three.js,Three.js,这里我有一个简单的脚本,它使用Three.JS MTL Loader和OBJ Loader加载模型和模型的材质。 现在,当加载模型时,它只加载第一个对象的颜色,其余对象保留白色。有人能解释一下这可能是什么原因吗? 这是我的密码 var loader = new THREE.MTLLoader(); loader.load('http://ustarp.com/3DModels/WebsiteParts/Polishe

这里我有一个简单的脚本,它使用Three.JS MTL Loader和OBJ Loader加载模型和模型的材质。 现在,当加载模型时,它只加载第一个对象的颜色,其余对象保留白色。有人能解释一下这可能是什么原因吗? 这是我的密码

            var loader = new THREE.MTLLoader();
                            loader.load('http://ustarp.com/3DModels/WebsiteParts/Polished Aluminum/Underbody/11228.mtl', function (materials) {
                               materials.preload();
                               var objLoaderOfficeChair = new THREE.OBJLoader();
                               objLoaderOfficeChair.setMaterials(materials);
                               objLoaderOfficeChair.load('http://ustarp.com/3DModels/WebsiteParts/Polished Aluminum/Underbody/11228.obj', function (object) {
               object.traverse( function ( child ) {
                  if ( child instanceof THREE.Mesh ){
                                     x=document.getElementsByClassName("popup");  // Find the elements
                                     for(var i = 0; i < x.length; i++){
                                        x[i].innerHTML += "<li class='mi_child'>"+child.name+"</li>";    // Change the content


                }
               }
            });
                            object.name = 'Part1';
                            object.scale.set(50,50,50);obj3d.add( object );
                            object.updateMatrix();  

                                  model2 = object;  
                              scene.add(object);                     
                });
            });
var loader=new THREE.MTLLoader();
loader.load('http://ustarp.com/3DModels/WebsiteParts/Polished 铝/车身底部/11228.mtl',功能(材料){
材料。预加载();
var objLoaderOfficeChair=new THREE.OBJLoader();
ObjLoaderOfficeHair.setMaterials(材料);
objLoaderOfficeHair.load('http://ustarp.com/3DModels/WebsiteParts/Polished 铝合金/车身底部/11228.obj',功能(对象){
遍历(函数(子对象){
if(三个.Mesh的子实例){
x=document.getElementsByClassName(“弹出”);//查找元素
对于(变量i=0;i”+child.name+“”;//更改内容
}
}
});
object.name='Part1';
object.scale.set(50,50,50);obj3d.add(object);
object.updateMatrix();
模型2=对象;
场景。添加(对象);
});
});
下面是所示模型的一个示例


您的mtl文件格式不正确:

# WaveFront *.mtl file (generated by Autodesk ATF)

newmtl 254,254,255
Ka 0.996078 0.996078 1.000000
Kd 0.996078 0.996078 1.000000
Ks 0.996078 0.996078 1.000000
Ns 1000.000000
d 1.000000

newmtl 229,31,31
Ka 0.898039 0.121569 0.121569
Kd 0.898039 0.121569 0.121569
Ks 1.000000 1.000000 1.000000
Ns 1000.000000
d 1.000000
newmtl
采用字符串作为标识符

编辑


您可以做的是将mtl文件和obj文件中的字符串
254255
替换为字符串
white
,将字符串
229,31,31
替换为字符串
redish

您的mtl文件格式不正确:

# WaveFront *.mtl file (generated by Autodesk ATF)

newmtl 254,254,255
Ka 0.996078 0.996078 1.000000
Kd 0.996078 0.996078 1.000000
Ks 0.996078 0.996078 1.000000
Ns 1000.000000
d 1.000000

newmtl 229,31,31
Ka 0.898039 0.121569 0.121569
Kd 0.898039 0.121569 0.121569
Ks 1.000000 1.000000 1.000000
Ns 1000.000000
d 1.000000
newmtl
采用字符串作为标识符

编辑


你可以做的是在mtl文件和obj文件中用字符串替换字符串
2542555
,用字符串
white
替换字符串
229,31,31

你有什么建议吗?我直接从Autodesk生成这些字符串。有没有一种方法可以通过编程实现这一点呢?可能一直都是用php的regex上载并用颜色名称替换RGB的MTL文件?是的,您可以这样做,但我会尝试找出AutoDesk创建此类名称的原因,并尝试修复它。您的建议是什么?我直接从AutoDesk生成这些文件是否有方法以编程方式执行此操作?可能使用php正则表达式上载并替换所有MTL文件用颜色名称替换RGB?是的,您可以这样做,但我会尝试找出AutoDesk创建此类名称的原因,并尝试修复它。