更改后再次加载原始纹理(.mtl)material
Load original texture (.mtl) again after changing material
要加载 .obj 文件,我使用 HelixToolkit.Wpf.SharpDX.Assimp.Importer。
这将加载 3d 模型并应用 mtl.
中定义的默认 material
var loader = new Importer();
return loader.Load(path); // returns HelixToolkitScene
这按预期工作。
我可以使用
更改模型的 material
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;
}
}
}
}
}
}
在某些时候,我想删除任何 materials 并以初始状态显示模型(加载后,使用 .mtl 文件中定义的默认 materials)。
如何重新加载原始 .mtl 文件?
我是否必须再次重新加载整个模型(从 .obj 导入)?
通常你必须在使用的 helix 视图模型中为导入的资产设置 属性,它应该重新创建模型数据。
如果您想避免这种情况,您可以直接访问特定的 material-属性。例如:
Material mat = ((GeometryModel3D)asset.Children[0]).Material;
要加载 .obj 文件,我使用 HelixToolkit.Wpf.SharpDX.Assimp.Importer。 这将加载 3d 模型并应用 mtl.
中定义的默认 materialvar loader = new Importer();
return loader.Load(path); // returns HelixToolkitScene
这按预期工作。
我可以使用
更改模型的 materialpublic 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;
}
}
}
}
}
}
在某些时候,我想删除任何 materials 并以初始状态显示模型(加载后,使用 .mtl 文件中定义的默认 materials)。
如何重新加载原始 .mtl 文件? 我是否必须再次重新加载整个模型(从 .obj 导入)?
通常你必须在使用的 helix 视图模型中为导入的资产设置 属性,它应该重新创建模型数据。
如果您想避免这种情况,您可以直接访问特定的 material-属性。例如:
Material mat = ((GeometryModel3D)asset.Children[0]).Material;