【问题标题】:Autodesk Forge Viewer: Change Texture in IFC ModelAutodesk Forge Viewer:更改 IFC 模型中的纹理
【发布时间】:2020-12-14 12:15:02
【问题描述】:

我们使用 Autodesk Forge 运行 Web 应用程序。在 web 应用程序中,我们想更改表面外观。因此我们使用以下 Audodesk 函数

...
event.fragIdsArray.forEach(frag => {
const model = this.viewer.model;
model.getFragmentList().setMaterial(frag, this.material)
var object = this.viewer.impl.getFragmentProxy(this.viewer.impl.model, frag)
object.updateAnimTransform()
}

代码适用于 Autodesk Revit 导入的模型。使用导入的 IFC 模型无法按预期工作。这两个模型都是通过 ADs model derivate api 导入到 AD Forge 查看器中的。

为了得到我们预期的结果,我们尝试使用 MeshBasicMaterial 和 MeshPhongMaterial。两者都具有相同的结果:Revit 模型很好,IFC 模型不是这样。

为了寻找一些解决方法,我们尝试复制片段网格并使用相同的混搭和更改的材质创建叠加层。代码就像

...
var obj = this.viewer.impl.getRenderProxy(this.viewer.impl.model, frag)
var meshProxy = new THREE.Mesh(obj.geometry, this.material);
meshProxy.matrix.copy(obj.matrixWorld);
meshProxy.matrixWorldNeedsUpdate = true;
meshProxy.matrixAutoUpdate = false;
meshProxy.frustumCulled = false;
this.viewer.impl.addOverlay("parkett", meshProxy);
...

结果如图(右侧为预期结果):

不知何故,看起来图像纹理显示得不够“详细”...

提前感谢您的任何建议!

【问题讨论】:

    标签: autodesk-forge autodesk-viewer ifc


    【解决方案1】:

    从这个问题我不完全确定问题是什么。将自定义材料应用于 IFC 模型时是否没有可见的变化?还是应用了自定义材料,但以“错误的方式”?

    如果根本不应用自定义材料,请确保模型合并。您可以确保使用viewer.model.unconsolidate();

    如果应用了自定义材质但其纹理看起来不正确,可能是因为 IFC 模型中的几何图形不包含正确的纹理坐标。在这种情况下,您必须自己映射纹理,例如,使用自定义着色器:https://github.com/petrbroz/forge-basic-app/blob/custom-texture-mapping/public/CustomTextureExtension.js

    【讨论】:

    • 如您在左侧看到的,材质已应用但看起来不正确。正确的外观在图片的右侧。我们会尝试您的建议并随时通知您!提前谢谢你
    猜你喜欢
    • 2021-10-02
    • 2020-01-06
    • 2020-11-24
    • 2022-01-02
    • 2021-02-10
    • 2021-02-11
    • 2023-02-02
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多