0

0

C# 操作3D模型文件 C#如何读取STL, OBJ等三维模型文件

幻夢星雲

幻夢星雲

发布时间:2026-03-11 16:33:11

|

911人浏览过

|

来源于php中文网

原创

用assimpnet读取stl/obj最省事,它是支持40+格式的成熟c#封装,需认准starnet维护的assimpnet包;加载时注意格式识别、路径处理、顶点去重及材质手动启用。

c# 操作3d模型文件 c#如何读取stl, obj等三维模型文件

AssimpNet 读取 STL/OBJ 最省事

STL 和 OBJ 都不是 .NET 原生支持的格式,硬写解析器不现实。直接上 AssimpNet——它是 C++ assimp 库的成熟 C# 封装,支持 40+ 种 3D 格式,STL/OBJ 是它最稳的两个用例。

常见错误是去 NuGet 搜 “assimp” 找到过时或维护中断的包(比如 AssimpAssimpManaged),必须认准 AssimpNet(作者:Starnet,最新版已支持 .NET 6+)。

  • 安装命令:dotnet add package AssimpNet
  • 加载 OBJ 示例:
    var importer = new Assimp.Importer();
    var scene = importer.ImportFile(@"model.obj", PostProcessPreset.TargetRealtimeMaximumQuality);
  • scene.RootNode 是树形结构入口,顶点/面数据藏在 scene.Meshes 里,每个 Mesh 包含 VerticesVector3D 数组)和 Face 列表
  • STL 文件通常无材质、无 UV,scene.Materials 可能为空,别一上来就遍历它导致 NullReferenceException

STL 二进制 vs ASCII:读取前先判断格式

同一个 .stl 文件可能以二进制或纯文本方式保存,AssimpNet 能自动识别,但手动解析或调试时容易卡在这一步——比如用 StreamReader 读二进制 STL 会乱码,用 BinaryReader 读 ASCII STL 会提前 EOF。

NetShop网店系统
NetShop网店系统

NetShop软件特点介绍: 1、使用ASP.Net(c#)2.0、多层结构开发 2、前台设计不采用任何.NET内置控件读取数据,完全标签化模板处理,加快读取速度3、安全的数据添加删除读取操作,利用存储过程模式彻底防制SQL注入式攻击4、前台架构DIV+CSS兼容IE6,IE7,FF等,有利于搜索引挚收录5、后台内置强大的功能,整合多家网店系统的功能,加以优化。6、支持三种类型的数据库:Acces

下载
  • 快速判断方法:读前 5 字节,如果是 "solid "(注意空格),基本是 ASCII;否则大概率是二进制
  • 二进制 STL 头部 80 字节是描述字段,接着 4 字节是三角面数量,之后每 50 字节为一个三角面(法向量 + 3 个顶点)
  • 不要自己写二进制解析来“练手”,AssimpNet 内部已处理好字节序和 padding,重复造轮子反而容易在小端/大端或对齐上出错

OBJ 的材质和纹理路径是相对的,别硬拼绝对路径

OBJ 文件本身不嵌入纹理,只通过 mtllib 引用 .mtl 文件,再由 .mtl 中的 map_Kd 指向图片。所有路径默认相对于 OBJ 文件所在目录。

  • AssimpNet 默认不会自动加载外部 MTL 或贴图,需手动设置 Importer.SetPropertyInteger(PropertyInteger.AI_CONFIG_IMPORT_OBJS_USE_MATERIALS, 1)
  • 如果模型和贴图不在同一目录,得自己实现 IAssimpLogger 或重写 FileSystem 行为,否则 scene.Materials[0].TextureCount 会是 0
  • Windows 下路径分隔符用反斜杠 \,但 OBJ 规范要求正斜杠 /AssimpNet 会自动转换,不用额外 replace

内存占用高?Mesh 数据默认没做顶点去重

OBJ/STL 导入后,Mesh.VerticesMesh.Faces 是原始索引结构:一个顶点被多个面共用时,在 Vertices 数组里会重复存多次。这会让内存翻几倍,尤其对大模型。

  • 启用顶点去重:构造 Importer 时传入 PostProcessSteps.GenSmoothNormals | PostProcessSteps.SortByPType | PostProcessSteps.FindDegenerates
  • 更关键的是 PostProcessSteps.ImproveCacheLocality —— 它会重排顶点顺序并合并重复项,Mesh.VertexCount 明显下降
  • 注意:去重后 Mesh.Faces 的索引值会变,别拿原始 OBJ 的面索引直接去查 Vertices

真正麻烦的是带动画或骨骼的 OBJ(其实极少),AssimpNet 不支持,得换 OpenAssetImport 或转向 glTF。普通静模,把上面四点踩准,基本没坑了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中的padding属性作用
css中的padding属性作用

在CSS中,padding属性用于设置元素的内边距。想了解更多padding的相关内容,可以阅读本专题下面的文章。

175

2023.12.07

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

647

2023.10.24

a和A对应的ASCII码数值
a和A对应的ASCII码数值

a的ascii码是65,a的ascii码是97;ascii码表中,一个字母的大小写数值相差32,一般知道大写字母的ascii码数值,其对应的小写字母的ascii码数值就算出来了,是大写字母的ascii码数值“+32”。想了解更多相关的内容,可阅读本专题下面的相关文章。

2248

2024.10.24

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

22

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

48

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

93

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

216

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

412

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

143

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.1万人学习

C 教程
C 教程

共75课时 | 5.3万人学习

C++教程
C++教程

共115课时 | 21.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号