当前位置: 首页 > news >正文

五、导入现有模型

在Helixtoolkit中手搓模型太难了,如果能导入现有模型简直不要太方便。helixtoolkit就提供了Assimp支持:HelixToolkit.SharpDX.Assimp,支持导入3DS、CMO、OBJ、FBX、DAE、glTF、LWO、OFF、STL等模型。

1、Importer类

Importer类提供多种 Load 方法,支持从文件路径、文件流加载模型,并加载其中的纹理、材质和动画数据。输出为HelixToolkit 的场景节点树HelixToolkitScene

// 通过文件路径加载,使用默认配置
public HelixToolkitScene? Load(string filePath);// 通过文件路径加载,指定是否并行处理及后处理步骤
public HelixToolkitScene? Load(string filePath, bool parallelLoad, PostProcessSteps postprocessSteps, params PropertyConfig[] configs);// 通过文件路径和自定义配置加载
public HelixToolkitScene? Load(string filePath, ImporterConfiguration config);// 通过文件流加载,支持格式提示和自定义纹理路径解析器
public ErrorCode Load(Stream fileStream, string filePath, string formatHint, out HelixToolkitScene? scene, ITexturePathResolver? texturePathResolver = null);

HelixtoolkitScene是模型与WPF交互的桥梁,其中包含许多场景节点SceneNode以及动画Animations。利用提供的ScenNodeGroupModel3D类型可以将场景节点添加进模型容器中,最后使用Element3DPresenter控件将其显示出来。

参考代码如下:

public SceneNodeGroupModel3D ModelGroup { get; } = new();
private HelixToolkitScene? scene;private void LoadFile()
{string relativePath = "./Models/3ds/Car.3DS";var importer = new Importer();scene = importer.Load(relativePath);if (scene is null){return;}ModelGroup.AddNode(scene.Root);
}//xaml中
<hx:Element3DPresenter Content="{Binding ModelGroup}" />

2、选中部件

SceneNode是所有其他节点的基类,我们将场景中的3D几何图形节点MeshNode抽取出来即可,注意嵌套关系,GroupNode中会包含GroupNode,GroupNode包含MeshNode。

 [ObservableProperty]private Geometry3D? selectedGeometry;[ObservableProperty]private System.Windows.Media.Media3D.Transform3D? selectedTransform;public Material SelectedMaterial { get; } =new PhongMaterial() { EmissiveColor = Color.Yellow };private void TraverseNodes(SceneNode node){if (node is MeshNode meshNode){node.MouseDown += (s, e) =>{SelectedGeometry = meshNode.Geometry;SelectedTransform = new System.Windows.Media.Media3D.MatrixTransform3D(meshNode.TotalModelMatrix.ToMatrix3D());};node.IsHitTestVisible = true;//可选中}// 检查节点是否有子项if (node is GroupNode groupNode){foreach (var child in groupNode.Items){TraverseNodes(child, meshNodes);}}}//XAML中
<hx:MeshGeometryModel3DGeometry="{Binding SelectedGeometry}"IsSelected="True"Material="{Binding SelectedMaterial}"Transform="{Binding SelectedTransform}"/>

http://www.dtcms.com/a/361757.html

相关文章:

  • Docker基本介绍
  • 面试记录8 Linux/c++中级开发工程师(智能座舱)
  • 六大关键步骤:用MES系统重构生产计划管理闭环
  • Linux开发必备:yum/vim/gcc/make全攻略
  • 如何使用 JMeter 进行接口测试。
  • Java 常见异常系列:NumberFormatException 数字格式异常
  • ROS1系列学习笔记之ROS的调用,示例为激光雷达N10P的运行(含常见问题与踩坑解答)
  • 数据结构:计数排序 (Counting Sort)
  • 逻辑门编程(一)——与或非门
  • 接口响应慢 问题排查指南
  • MongoDB 内存管理:WiredTiger 引擎原理与配置优化
  • GraalVM Native Image:让 Java 程序秒启动
  • 植物中lncRNA鉴定和注释流程,代码(包含Identified,Classification,WGCNA.....)
  • shell编程 函数、数组与正则表达式
  • 预处理——嵌入式学习笔记
  • day06——类型转换、赋值、深浅拷贝、可变和不可变类型
  • 009=基于YOLO12与PaddleOCR的车牌识别系统(Python+PySide6界面+训练代码)
  • C++运行时类型识别
  • k8s知识点汇总2
  • Java 加载自定义字体失败?从系统 fontconfig 到 Maven 损坏的全链路排查指南
  • 基于 C 语言的网络单词查询系统设计与实现(客户端 + 服务器端)
  • 适合工程软件使用的python画图插件对比
  • Maven - Nexus搭建maven私有仓库;上传jar包
  • 20250829的学习笔记
  • OPENCV 基于旋转矩阵 旋转Point2f
  • 代码随想录二刷之“回溯”~GO
  • 机器翻译:python库translatepy的详细使用(集成了多种翻译服务)
  • Spring框架入门:从IoC到AOP
  • 爬虫实战练习
  • 如何在Github中创建仓库?如何将本地项目上传到GitHub中?