Autodesk forge 锻造中的材料更换
我们目前正在让客户端在页面加载时检索对象状态(这将导致模型中的“挂起”对象变成不同的颜色)。然后我们轮询更改以更新颜色(首先:当查看器加载时,挂起的对象被着色,然后我们继续轮询以检查并再次更改状态,使Forge以不同的颜色渲染这些对象并存储它们的旧颜色/材质。当轮询接收到对象不应再着色的更改时,它告诉Forge再次使用旧颜色/材质 问题: 我们已经发现了问题所在,但无法找到解决方法。问题是,在Forge中更换材料在启动后不再起作用,它只在前3秒左右起作用(材料用于显示颜色) 但是,即使在开始~3秒后,设置覆盖层仍然有效(显示覆盖层而不是材质以显示颜色)。 这不是我们想要实现的。这看起来没有优化,因为覆盖层将贯穿所有内容 然而,这些材料似乎被“锁定”,如中所示,在最初的~3秒后,它们无法再被更改。它们似乎没有被刷新或其他东西 在示例中,我们发现他们使用viewer.impl.invalidate(true)来刷新Forge查看器,但这在3秒钟后没有任何作用 我们还尝试了viewer.impl.invalidate(true,true,true)的各种组合,以及将material.needsUpdate设置为true,以及尝试重新渲染整个场景 我们还发现:,但在Forge中找不到一个好方法,我们尝试了viewer.requestsilender(),但也没有任何效果 不管怎样,我们已经尝试了我们能想到的一切,并且可以在网上找到这些材料,但是没有任何改变。 我们希望找到一个对Forge的工作方式更有经验的人,他能看到材料代码的错误之处 至于内容,以下是您需要了解的所有代码: 下面是设置颜色的“index.html”文件的一小部分:Autodesk forge 锻造中的材料更换,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我们目前正在让客户端在页面加载时检索对象状态(这将导致模型中的“挂起”对象变成不同的颜色)。然后我们轮询更改以更新颜色(首先:当查看器加载时,挂起的对象被着色,然后我们继续轮询以检查并再次更改状态,使Forge以不同的颜色渲染这些对象并存储它们的旧颜色/材质。当轮询接收到对象不应再着色的更改时,它告诉Forge再次使用旧颜色/材质 问题: 我们已经发现了问题所在,但无法找到解决方法。问题是,在Forge中更换材料在启动后不再起作用,它只在前3秒左右起作用(材料用于显示颜色) 但是,即使在开始~3
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);
}
<>我不知道你是如何实现你的应用程序的,所以我只告诉你我在你的代码中发现了什么。如果你想解决你所处理的问题,你可以考虑提供一个可重复的案例来证明,我会很乐意地把它传递给我们的开发团队。下面的项目应该在可重复的情况下:
Forge应用程序
,可以通过一个简单的过程运行和调试,以分析其在示例模型中的行为three.js应用程序
,可以运行并演示所需的着色器效果。注意。Forge Viewer使用的是r71three.js
forge。help@autodesk.com
和在发送之前删除敏感数据或信息
=我在你的代码中找到了一些东西:
我发现您的ColorMaterial
扩展中有一些错误的类型和缺少的操作。材质的颜色属性应该是THREE.color
的a类型。以下是我的修改:
Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(objectIds, color)
{
if( !(color instanceof THREE.Color) ) throw 'Invalid argument: Color';
var material = new THREE.MeshPhongMaterial
({
color: color,
opacity: 0.8,
transparent: true
});
viewer.impl.matman().addMaterial( 'ColorMaterial-' + new Date().getTime(), material, true );
// ...........
};
其结果如下:
在ColorOverlay
扩展中,材质颜色属性的类型也是错误的,它也应该是THREE.color
类型。将其更改为THREE.color
应该可以正常工作。此外,覆盖在3D对象上,因此您应该使用setColorOverlay()调用viewer.hide()
放在一起。否则,它看起来不会像透明对象
不隐藏墙的三维对象:
隐藏墙的三维对象:
。您好,非常感谢您的回复。我们已经按照您回复的第2部分中所述的步骤进行了操作。遗憾的是,这并没有使材料起作用,但它使覆盖层现在看起来好多了。我们非常有兴趣与forge共享我们的项目。help@autodesk.com