如何更改用OBJ + MTLLoader加载的模型的材料属性?

时间:2017-07-19 07:30:05

标签: javascript three.js

由于其伴随的.mtl文件,我已经成功加载了一个.obj模型,其中正确的材质映射到模型上。但目前加载的模型非常暗,所以将发光颜色改为白色是一个好主意,但我找不到办法。我有这个:

MTLLoader.setTexturePath( '../models/' );
MTLLoader.setPath( '../models/' );
var url = "model.mtl";
MTLLoader.load( url, function( materials ) {

    materials.preload();
    OBJLoader.setMaterials( materials );
    OBJLoader.setPath( '../models/' );
    OBJLoader.load( 'model.obj', function ( object ) {

        scene.add( object );

    });
});

我试过这样做:

object.traverse (function (child) {
            if (child instanceof THREE.Mesh) {
              child.material = new THREE.MeshLambertMaterial({emissive: 'white'});
            }
         });

它自己创建一个自发光材料,但忽略我的.mtl文件。有没有办法可以将两者结合起来?我无法在任何地方找到与此相关的任何内容。提前致谢。

1 个答案:

答案 0 :(得分:1)

你正在覆盖这些材料。你想要做的是仅通过改变发射值来修改它:

object.traverse (function (child) {
        if (child instanceof THREE.Mesh) {
          child.material.emissive.setHex( 0xFFFFFF );
        }
     });