Autodesk forge 锻造中的材料更换

Autodesk forge 锻造中的材料更换,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我们目前正在让客户端在页面加载时检索对象状态(这将导致模型中的“挂起”对象变成不同的颜色)。然后我们轮询更改以更新颜色(首先:当查看器加载时,挂起的对象被着色,然后我们继续轮询以检查并再次更改状态,使Forge以不同的颜色渲染这些对象并存储它们的旧颜色/材质。当轮询接收到对象不应再着色的更改时,它告诉Forge再次使用旧颜色/材质 问题: 我们已经发现了问题所在,但无法找到解决方法。问题是,在Forge中更换材料在启动后不再起作用,它只在前3秒左右起作用(材料用于显示颜色) 但是,即使在开始~3

我们目前正在让客户端在页面加载时检索对象状态(这将导致模型中的“挂起”对象变成不同的颜色)。然后我们轮询更改以更新颜色(首先:当查看器加载时,挂起的对象被着色,然后我们继续轮询以检查并再次更改状态,使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”文件的一小部分:

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使用的是r71
    three.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