【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?

这篇博客介绍了如何利用Assimp库在LearnOpenGL中加载3D.obj模型,Assimp是一个跨平台的3D模型导入库,支持多种文件格式,如3DS、DAE、glTF等。它将不同格式的数据统一处理成通用的数据结构,方便在OpenGL中渲染。在导入模型后,需要遍历场景节点,提取Mesh对象,获取顶点、索引和材质信息,最终构建可用于渲染的Model对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、LearnOpenGL中介绍Assimp

在通过LearnOpenGL学习OpenGL知识的时候,有介绍如何通过Assimp来加载3D模型,并了解了Mesh网格的概念。


https://learnopengl-cn.github.io/03%20Model%20Loading/01%20Assimp/ 中有介绍使用Assimp库来加载3D模型.obj格式。

一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写。Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于Assimp的数据结构保持不变,不论导入的是什么种类的文件格式,它都能够将我们从这些不同的文件格式中抽象出来,用同一种方式访问我们需要的数据。

当使用Assimp导入一个模型的时候,它通常会将整个模型加载进一个场景(Scene)对象,它会包含导入的模型/场景中的所有数据。Assimp会将场景载入为一系列的节点(Node),每个节点包含了场景对象中所储存数据的索引,每个节点都可以有任意数量的子节点。Assimp数据结构的(简化)模型如下:

在这里插入图片描述

  • 和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中。Scene对象也包含了场景根节点的引用。
  • 场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中网格数组的索引。
  • 一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。
  • 一个网格包含了多个面。Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的,使用一个索引缓冲来渲染是非常简单的(见你好,三角形)。
  • 最后,一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。

所以,我们需要做的第一件事是将一个物体加载到Scene对象中,遍历节点,获取对应的Mesh对象(我们需要递归搜索每个节点的子节点),并处理每个Mesh对象来获取顶点数据、索引以及它的材质属性。最终的结果是一系列的网格数据,我们会将它们包含在一个Model对象中。

二、Assimp 官方介绍

那么Assimp除了支持.obj格式,还支持什么其他的3D模型格式呢?

我们通过官网,可以看到如下所示的介绍:
https://assimp-docs.readthedocs.io/en/v5.1.0/about/introduction.html


Asset-Importer-Lib(简称 assimp)是一个库,用于加载和处理来自各种 3D 数据格式的几何场景。通过支持节点层次结构、静态或蒙皮网格、材质、骨骼动画和潜在纹理数据,它主要针对典型的游戏场景进行定制。但也支持一些 3D 打印和 CAD 格式。

该库不是为速度而设计的它主要用于从各种来源导入资产一次并将其存储为特定于引擎的格式,以便每天轻松快速地加载。

assimp 还能够对导入的数据应用各种后处理步骤,例如转换为索引网格、计算法线或切线/双切线或从右手坐标系转换为左手坐标系。

Assimp-Lib 目前支持以下文件格式(请注意,某些加载器缺少其格式的某些功能,因为某些文件格式包含 assimp 不支持的数据,有些东西需要大量转换工作,尚未实现,有些(大多数…)格式缺乏适当的规范):

  • 3D Manufacturing Format (.3mf)

  • Collada (.dae, .xml)

  • Blender (.blend)

  • Biovision BVH (.bvh)

  • 3D Studio Max 3DS (.3ds)

  • 3D Studio Max ASE (.ase)

  • glTF (.glTF)

  • glTF2.0 (.glTF)

    • KHR_lights_punctual ( 5.0 )

    • KHR_materials_pbrSpecularGlossiness ( 5.0 )

    • KHR_materials_unlit ( 5.0 )

    • KHR_texture_transform ( 5.1 under test )

  • FBX-Format, as ASCII and binary (.fbx)

  • Stanford Polygon Library (.ply)

  • AutoCAD DXF (.dxf)

  • IFC-STEP (.ifc)

  • Neutral File Format (.nff)

  • Sense8 WorldToolkit (.nff)

  • Valve Model (.smd, .vta)

  • Quake I (.mdl)

  • Quake II (.md2)

  • Quake III (.md3)

  • Quake 3 BSP (.pk3)

  • RtCW (.mdc)

  • Doom 3 (.md5mesh, .md5anim, .md5camera)

  • DirectX X (.x)

  • Quick3D (.q3o, .q3s)

  • Raw Triangles (.raw)

  • AC3D (.ac, .ac3d)

  • Stereolithography (.stl)

  • Autodesk DXF (.dxf)

  • Irrlicht Mesh (.irrmesh, .xml)

  • Irrlicht Scene (.irr, .xml)

  • Object File Format ( .off )

  • Wavefront Object (.obj)

  • Terragen Terrain ( .ter )

  • 3D GameStudio Model ( .mdl )

  • 3D GameStudio Terrain ( .hmp )

  • Ogre ( .mesh.xml, .skeleton.xml, .material )

  • OpenGEX-Fomat (.ogex)

  • Milkshape 3D ( .ms3d )

  • LightWave Model ( .lwo )

  • LightWave Scene ( .lws )

  • Modo Model ( .lxo )

  • CharacterStudio Motion ( .csm )

  • Stanford Ply ( .ply )

  • TrueSpace (.cob, .scn)

  • XGL-3D-Format (.xgl)

三、参考链接

### FBX文件格式及其相关用途 FBX(Filmbox)是一种用于存储和交换3D数据的文件格式,最初由Autodesk开发并广泛应用于游戏、影视和其他3D建模领域。它支持多种类型的3D数据,包括几何体、动画、材质、纹理以及摄像机等[^1]。 #### FBX文件的主要功能 FBX文件的核心优势在于其跨平台兼容性和强大的数据交互能力。以下是FBX的一些主要应用: - **3D模型导入/导出**:许多主流软件如Maya、Blender、Cinema 4D都支持FBX作为标准的3D数据交换格式[^2]。 - **动画传输**:除了静态模型外,FBX还能够保存复杂的动画序列,使得不同软件之间的动画传递更加便捷。 - **多维场景构建**:通过FBX to AE插件,可以直接将包含摄像机动画和平面参考层的FBX文件导入Adobe After Effects中进行后期处理。 #### FBX与其他常见3D格式的关系 虽然OBJ也是常用的3D模型交换格式之一,但它仅限于表示简单的几何形状而不具备对复杂属性的支持;相比之下,FBX不仅涵盖了基本的对象结构描述还能记录更丰富的细节比如骨骼绑定关系、蒙皮权重等等。 #### 实际操作指南 - 将其他类型转换成FBX 对于希望将自己的作品迁移到支持FBX的工作流中的创作者来说,掌握如何正确地完成这种转变至关重要: ##### PMX转FBX流程概述 当涉及到从MikuMikuDance (MMD)生态系统的PMX格式向通用性强得多的FBX过渡时,通常遵循如下几个阶段性的步骤来实现这一目标[^4]: 1. 利用专门工具加载待迁移的目标PMX文档; 2. 执行初步解析与验证过程确认源素材状态良好适合进一步加工改造; 3. 应用特定选项调整输出规格满足下游需求——例如启用`Fix Model`特性自动修正潜在错误同时清理冗余组件; 4. 配置好最终渲染参数之后执行实际导出动作生成预期成果即新的FBX实例。 下面给出一段Python脚本示范怎样自动化部分上述提到的任务环节: ```python import bpy def convert_pmx_to_fbx(input_path, output_path): # 清理当前场景以防污染 bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete() # 导入PMX模型 bpy.ops.import_user_extension.some_plugin(filepath=input_path) # 设置导出选项 bpy.context.scene.export_settings.use_selection = True # 出口至指定路径下的FBX文件 bpy.ops.export_scene.fbx( filepath=output_path, use_active_collection=True, add_leaf_bones=False, bake_anim_use_nla_strips=False ) convert_pmx_to_fbx('path/to/input.pmx', 'path/to/output.fbx') ``` 此代码片段假设存在一个名为`some_plugin`的自定义扩展负责处理PMX输入逻辑,并且调用了Blender内置API完成了整个转化链条上的关键节点控制工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节卷动

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值