【问题标题】:Three.js MTLLoader() only loads first objects color?Three.js MTLLoader() 只加载第一个对象颜色?
【发布时间】:2017-11-10 05:50:18
【问题描述】:

这里我有一个简单的脚本,它使用 Three.JS MTL 加载器和 OBJ 加载器来加载模型和模型的材料。 现在,当它加载模型时,它只加载第一个对象颜色,其余的保持白色。任何人都可以阐明这可能是什么原因吗? 这是我的代码

            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);                     
                });
            });

这是一个展示模型的例子。

http://ustarp.com/3DModels/?part=2c75cf2681788adaca63aa95ae028b22

【问题讨论】:

    标签: three.js


    【解决方案1】:

    您的 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 接受一个字符串作为标识符。

    编辑

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

    【讨论】:

    • 你有什么建议?
    • 我直接从 AutoDesk 生成这些
    • 有没有办法以编程方式做到这一点?
    • 也许正则表达式与 php 所有上传的 MTL 文件并将 RGB 替换为颜色名称?
    • 是的,您可以这样做,但我会尝试找出 AutoDesk 创建此类名称的原因,并可能尝试修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2015-12-23
    • 2023-02-26
    • 2017-03-19
    • 2017-07-17
    • 2013-05-08
    • 2021-05-03
    相关资源
    最近更新 更多