更改材质后再次加载原始纹理(.mtl)

Posted

技术标签:

【中文标题】更改材质后再次加载原始纹理(.mtl)【英文标题】:Load original texture (.mtl) again after changing material 【发布时间】:2021-12-27 10:41:13 【问题描述】:

要加载 .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 导入)?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于更改材质后再次加载原始纹理(.mtl)的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有 mtl 和纹理的 obj 上传到存储桶?

Minko:如何在 3d 加载模型上应用材质(纹理)

使用vue学习three.js之加载和使用纹理-使用TextureLoader加载纹理,使用纹理材质创建模型

使用vue学习three.js之加载和使用纹理-加载DDSPVRTGA格式的纹理,使用纹理材质创建模型

加载了应用纹理材质的模型只是黑色,不知道如何调试

有没有办法用纹理一次上传 obj 和 mtl 文件