【发布时间】:2021-06-02 08:30:27
【问题描述】:
我们使用查看器(版本 7)来显示 3d 模型使用用户定义的调色板为受影响的对象着色的问题。
模型的剩余对象以灰色调着色。 为了实现这一点,我使用了 setThemingColor 技术:我将 rootid 递归的主题颜色设置为灰色,然后将正确的主题颜色设置为特定的发布对象。
所有使用的颜色都是 THREE.Vector4,不透明度设置为 1。这样,themingColor 不会与对象的“自然”颜色混合,但它会“覆盖”对象。
为了改善用户体验,我们希望允许用户调暗不受问题影响的对象,而不是使用 setThemingColor 设置灰色。
现在的问题是:是否可以在保留选择功能的同时通过将淡化级别指定为查看器隐藏方法的幻影来更改一组对象的颜色(材质?)?
我尝试了以下方法,但没有成功:
const mat = new THREE.MeshBasicMaterial({ color: 0x00ff00, opacity: 0.925, transparent: false });
(this.viewer as any).impl.getMaterials().addMaterial('ghost-material', mat, true);
const model = (this.viewer as any).model;
const tree = model.getInstanceTree();
const frags = model.getFragmentList();
[19240, 20373, 34364, 58813].map(dbid => {
tree.enumNodeFragments(dbid, (fragid) => {
console.log(fragid);
frags.setMaterial(fragid, mat);
(this.viewer as any).impl.invalidate(true);
}, true);
});
[19240, 20373, 34364, 58813] 是有效的 dbid。 不透明度几乎为 1,材料不透明,希望能看到一些东西。 我试图使每个片段的查看器无效。 运行此脚本后,3d 模型保持不变。 'ghost-material' 会定期在 matman 上注册,但不会“取代”原生的。
我哪里做错了?
【问题讨论】:
标签: autodesk-forge autodesk-viewer