2017-08-22 6 views
0

Ich habe einige der Forschung in Richtung Shaders getan und ich fand dies:Forge-Viewer Benutzerdefinierte Shaders

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

Meine Frage ist. Es scheint, als ob das nicht nur die Farbe ändert, sondern auch das Material verändert, was bedeutet, dass Sie es nicht rückgängig machen können. In meinem Szenario müssten wir es rückgängig machen können (Farb- und Materialrücksetzung). Könnte ich das irgendwie möglich machen?

Antwort

1

Um diese Änderungen rückgängig zu machen, müssen Sie etwas tun, um die Beziehungen zwischen Originalmaterialien und der ID des Forge-Fragments beizubehalten. Zum Beispiel können Sie ein Array zu erinnern, diese Abbildung in der Funktion setMaterial, wie auf diese Weise erstellen:

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); 
} 

für die Wiederherstellung Materialien, können Sie auf diese Weise folgen:

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; 
} 
+0

Vielen Dank für die ausführlichen und gute Hilfe – Mykita

Verwandte Themen