首页 > 解决方案 > 更改材质后再次加载原始纹理(.mtl)

问题描述

要加载 .obj 文件,我使用 HelixToolkit.Wpf.SharpDX.Assimp.Importer。这将加载 3d 模型并应用 mtl 中定义的默认材质。

var loader = new Importer();
return loader.Load(path); // returns HelixToolkitScene

这按预期工作。

我可以通过使用更改模型的材料

public static void ApplyMaterial(HelixToolkitScene scene, Material material)
{
  if (material != null)
  {
    if (scene != null)
    {
      if (scene.Root != null)
      {
        foreach (var node in scene.Root.Traverse())
        {
          if (node is MaterialGeometryNode m)
          {
            m.Material = material;                
          }
        }
      }
    }
  }
}

在某些时候,我想删除所有材料并以初始状态显示模型(加载后,使用 .mtl 文件中定义的默认材料)。

如何重新加载原始 .mtl 文件?我是否必须再次重新加载整个模型(从 .obj 导入)?

标签: c#wpfsharpdxassimp

解决方案


通常,您必须在使用的螺旋视图模型中设置导入资产的属性,并且它应该重新创建模型数据。

如果您想避免这种情况,您可以直接访问特定的材料属性。例如:

 Material mat = ((GeometryModel3D)asset.Children[0]).Material;

推荐阅读