伪造查看器自定义着色器

时间:2017-08-22 08:51:42

标签: autodesk-forge autodesk-viewer

我对Shaders做了一些研究,我发现了这个:

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

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

1 个答案:

答案 0 :(得分: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;
}