繁体   English   中英

Autodesk Forge Viewer:更改 IFC 模型中的纹理

[英]Autodesk Forge Viewer: Change Texture in IFC Model

我们使用 Autodesk Forge 运行一个网络应用程序。 在 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 模型派生 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);
...

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

左侧:添加到 IFC 的纹理。右侧:与rvt模型相同

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

提前感谢您的任何建议!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM