目前,我们正在让客户端在页面加载时检索对象状态(这将导致模型中的“待处理”对象变成不同的颜色)。然后我们轮询更改以更新着色(首先:当查看器加载时,挂起的对象会着色,然后我们继续轮询以再次检查和更改状态,以使 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 工作原理更有经验的人,能够看到材料代码哪里出了问题。
至于内容,以下是您了解正在发生的情况所需的所有代码:投递箱链接
这是设置颜色的“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);
}