【发布时间】:2018-02-07 10:20:25
【问题描述】:
我们目前正在让客户端在页面加载时检索对象状态(这将导致模型中的“待处理”对象变成不同的颜色)。然后我们轮询更改以更新颜色(首先:待处理的对象在查看器加载时被着色,然后我们继续轮询以再次检查和更改状态,以使 Forge 以不同的颜色渲染它们并存储它们的旧颜色/材质。当轮询收到一个对象不应再着色的更改时,它会告诉 Forge 再次使用旧的颜色/材料。
问题: 我们已经找到了问题所在,但我们不知道如何解决它。问题是在 Forge 中更改材料在启动后不再起作用,它仅在前约 3 秒左右起作用(材料用于显示颜色)。
但是,即使在最初的约 3 秒之后,设置叠加层也可以工作(显示叠加层而不是显示颜色的材质)。 这不是我们想要达到的。这看起来未优化,因为叠加层将贯穿所有内容。
然而,这些材料似乎被“锁定”了,因为它们在前约 3 秒后无法再更改。好像没有刷新什么的
在示例中,我们发现他们使用 viewer.impl.invalidate(true) 来刷新 Forge 查看器,但在大约 3 秒后没有任何作用。
我们还尝试了 viewer.impl.invalidate(true, true, true) 以及将 material.needsUpdate 设置为 true 的每种组合,以及尝试重新渲染整个场景。
我们也发现了这个:https://github.com/mrdoob/three.js/issues/790,但我们在 Forge 中找不到一个好的方法,我们尝试了 viewer.requestSilentRender() 但也没有任何效果。
不管怎样,我们已经尝试了所有能想出的方法,并且可以在网上找到材料来使材料发挥作用,但没有任何改变。 我们正在寻找对 Forge 的工作方式更有经验的人,他们可以看到材料代码做错了什么。
至于内容,以下是您了解正在发生的事情所需的所有代码: DROPBOX LINK
这里是设置颜色的“index.html”文件的一小部分:
try
{
viewer.restoreAllColorOverlays(); //for materials instead of overlays: viewer.restoreAllColorMaterials();
$.each(colors, function(color, selectionIds)
{
viewer.setColorOverlay(selectionIds, color); //for materials instead of overlays: viewer.setColorMaterial(selectionIds, color);
});
}
catch(error)
{
console.error(error);
}
【问题讨论】:
标签: autodesk-forge autodesk-viewer