【五十四,模型加载-1 Assimp】

3D建模工具

常用的3D建模工具:

  • Blender
  • 3DS Max
  • Maya

建模工具可以让艺术家创建复杂的形状,使用一种叫做UV映射(uv-mapping)的手段来贴图,建模工具在导出模型文件时自动生:

  • 顶点坐标
  • 顶点法线
  • 纹理坐标

每一种建模工具导出的文件格式是不一样的,我们的工作是要解析不同的模型文件以及提取所有有用的信息,将它们存储为OpenGL能理解的格式。

Wavefrongt的.obj模型格式包含了:

  • 模型数据
  • 材质信息 - 模型颜色和漫反射/镜面光照贴图

Collada文件格式包含:

  • 模型
  • 光照
  • 多种材质
  • 动画数据
  • 摄像机
  • 完整的场景信息

总之,不同种类的文件格式有很多种,它们之间没有一个通用的结构,幸运的是,有一个库专门处理模型文件的解析。

模型加载库

一个非常流行的模型导入库是Assimp,它是Open Asset Import Library的缩写。Assimp能导入很多种不同的模型文件格式,它将素有的模型数据加载至Assimp的通用数据结构中,Assimp会将场景载入为一系列的节点,每个节点包含了场景对象中所储存数据的索引,每个节点都可以有任意数量子节点,数据结构如下:

assimp_structure.png
  • 所有的场景/模型数据都包含在Scene对象中,Scene也包含了场景根节点的引用;
  • 场景根节点可能包含子节点,它会有一些列指向场景对象中mMeshes数组中储存的网格数据的索引;
  • 一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。
  • 一个网格包含了多个面。Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。
  • 一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容