c# - 更改材质后再次加载原始纹理(.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 导入)?
解决方案
通常,您必须在使用的螺旋视图模型中设置导入资产的属性,并且它应该重新创建模型数据。
如果您想避免这种情况,您可以直接访问特定的材料属性。例如:
Material mat = ((GeometryModel3D)asset.Children[0]).Material;
推荐阅读
- python - 如何抑制来自 Tensorflow 的所有签名警告?
- visual-studio - 创建 Vulkan 开发人员环境时 glfw.3lib 的许多链接器错误
- entity-framework-core - 运行时 EF EnsureCreatedAsync 上的“找不到方法”
- wordpress - 分析 - IBM Watson 助手
- c++ - 尝试使用 CodeBlocks 创建一个 Sales_item.h 类
- python - 在 tkinter / Canvas 中创建菜单
- php - Laravel 8 - 连接到 SQL 数据库成功,但无法查询
- r - 如何为 vtree 对象添加标题并保存?
- sql - 它总是对 Postgresql 中的列使用 seq 扫描导致性能问题
- javascript - 为什么我的 history.push 在一个功能中起作用,而在另一个功能中起作用?