繁体   English   中英

Forge Viewer自定义着色器

[英]Forge Viewer Custom Shaders

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

https://forge.autodesk.com/blog/forge-viewer-custom-shaders-part-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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM