gpt4 book ai didi

autodesk-forge - 更改 Forge 中的 Material

转载 作者:行者123 更新时间:2023-12-02 11:30:36 27 4
gpt4 key购买 nike

我们目前正在让客户端在页面加载时检索对象状态(这将导致模型中的“待处理”对象变成不同的颜色)。然后我们轮询更改以更新着色(首先:当查看器加载时,挂起的对象会着色,然后我们继续轮询以再次检查和更改状态,以使 Forge 以不同的颜色渲染它们并存储它们的旧颜色/ Material 。当轮询收到一个对象不应再着色的更改时,它会告诉 Forge 再次使用旧的颜色/ Material 。

问题:我们已经找到了问题所在,但不知道如何解决。问题是,在 Forge 中更改 Material 在启动后不再起作用,它只在前 3 秒左右起作用( Material 用于显示颜色)。

但是,即使在前约 3 秒后,设置叠加层仍然有效(显示叠加层而不是 Material 来显示颜色)。这不是我们想要实现的目标。这看起来未经优化,因为覆盖层将显示在所有内容中。

然而,这些 Material 似乎被“锁定”,因为它们在前 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(),但也没有做任何事情。

无论如何,我们已经尝试了一切我们能想到的并且可以在网上找到的 Material 来使 Material 发挥作用,但没有任何效果。我们正在寻找对 Forge 工作原理更有经验的人,能够看到 Material 代码哪里出了问题。

至于内容,以下是您了解正在发生的情况所需的所有代码: 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);
}

最佳答案

我不知道你是如何实现你的应用程序的,所以我只告诉你我在你的代码中发现的内容。如果您想解决您所解决的问题,您可以考虑提供一个可重现的案例来证明这一点,我很乐意将其传递给我们的开发团队。以下项目应处于可重现的情况下:

  1. 对您想要实现的目标的简短准确描述。您观察到的行为与您期望的行为,以及为什么这是一个问题。
  2. 用于运行测试的完整但最小的示例源模型。
  3. 一个完整但最小的 Forge 应用,可以通过简单的过程来运行和调试,以分析示例模型中的行为。
  4. 一个完整但最小的纯 two.js 应用,可以运行并演示您想要的着色器效果。 注意。 Forge Viewer 正在使用 r71 third.js
  5. 重现问题的详分割步说明,例如选择哪个元素,启动什么命令等。

如果您的可重现案例无法在此处公开发布,请将其发送至 forge.help@autodesk.com在发送前删除敏感数据或信息

=== 我在你的代码中发现了一些东西:

我发现您的 ColorMaterial 扩展中有一些错误的类型和缺失的操作。 Material 的颜色属性应该是THREE.Color类型。这是我的修改:

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 );

// ...........
};

它的结果在这里: enter image description here

ColorOverlay扩展中, Material 颜色属性的类型也是错误的,它也应该是THREE.Color类型。将其更改为 THREE.Color 应该可以正常工作。此外,overlay 会覆盖 3D 对象,因此您应该将 viewer.hide()setColorOverlay() 一起调用。否则,它看起来就不像透明物体。

不隐藏墙壁的 3D 对象: enter image description here

隐藏墙壁的 3D 对象: enter image description here

关于autodesk-forge - 更改 Forge 中的 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45947925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com