【问题标题】:Referencing unused materials from a JSON scene从 JSON 场景中引用未使用的材质
【发布时间】:2016-08-16 09:44:32
【问题描述】:

我正在尝试在 JSON 场景中创建不同的材质,将默认材质分配给网格,并让用户在用户界面中的不同材质之间切换。

解析 JSON 后是否可以引用所有材料,甚至是未使用的材料?

【问题讨论】:

    标签: json three.js loading scene


    【解决方案1】:

    检查THREE.ObjectLoader 的代码后,发现它解析了整个JSON,但显式返回了对场景对象的单个引用。我通过在运行时修补 parse 方法解决了这个问题。代码取自THREE.ObjectLoader.parse,只有返回值不同(返回Object,不再返回THREE.Object3D)。

    function objectLoaderParseOverride(json, onLoad) {
        var ret = {};
    
        ret.geometries = this.parseGeometries( json.geometries );
        ret.images = this.parseImages( json.images, function () {
            if ( onLoad !== undefined ) onLoad( ret );
        } );
        ret.textures  = this.parseTextures( json.textures, ret.images );
        ret.materials = this.parseMaterials( json.materials, ret.textures );
        ret.object = this.parseObject( json.object, ret.geometries, ret.materials );
        if ( json.animations ) {
            ret.object.animations = this.parseAnimations( json.animations );
        }
        if ( json.images === undefined || json.images.length === 0 ) {
            if ( onLoad !== undefined ) onLoad( ret );
        }
        return ret;
    }
    
    var loader = new THREE.ObjectLoader();
    loader.parse = objectLoaderParseOverride;
    

    【讨论】:

      猜你喜欢
      • 2020-07-12
      • 2015-01-26
      • 2014-12-07
      • 2017-11-03
      • 2018-05-14
      • 2020-11-12
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多