【问题标题】:Forge Viewer Custom ShadersForge 查看器自定义着色器
【发布时间】:2018-01-30 11:15:17
【问题描述】:

我对着色器进行了一些研究,发现了这一点:

https://forge.autodesk.com/blog/forge-viewer-custom-shaders-part-1

我的问题是。似乎这不仅会改变颜色,还会改变材料,这意味着您无法撤消它。在我的场景中,我们需要能够撤消它(重置颜色和材料)。我能以某种方式使这成为可能吗?

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    要撤消这些更改,您必须做一些事情来保持原始材料和 Forge 片段 id 之间的关系。例如,你可以在函数setMaterial中创建一个数组来记住这个映射,像这样:

    setMaterial( fragIds, material ) {
    
        const fragList = this._viewer.model.getFragmentList();
    
        // Array for kepping original materials of the Forge fragment.
        if( !Array.isArray( this.materialMap ) ) {
            this.materialMap = [];
        }
    
        this.toArray(fragIds).forEach( ( fragId ) => {
              // Keep material relations.
              const originalMat = fragList.getMaterial( fragId );
              this.materialMap[fragId] = originalMat;
    
              fragList.setMaterial( fragId, material );
        });
    
        this._viewer.impl.invalidate( true );
    }
    

    要恢复材料,可以这样:

    restoreMaterials() {
    
      if( !Array.isArray( this.materialMap ) ) return;
    
      for( let fragId in this.materialMap ) {
          const material = this.materialMap[fragId];
          fragList.setMaterial( fragId, material );
      }
    
      this._viewer.impl.invalidate( true );
      // Clean mappings.
      this.materialMap.length = 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 2021-07-14
      • 2021-01-10
      • 2021-09-02
      • 1970-01-01
      • 2012-09-28
      • 2012-10-12
      • 1970-01-01
      • 2021-02-08
      相关资源
      最近更新 更多