我对Shaders做了一些研究,我发现了这个:
https://forge.autodesk.com/blog/forge-viewer-custom-shaders-part-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;
}