参考:
https://learnopenglcn.github.io/03%20Model%20Loading/01%20Assimp/
前言
一般像汽车,房子或者人形角色这样的复杂形状,如果是自己手动定义所有的顶点、法线和纹理坐标,显然不太可能。
我们想要的是将这些模型(Model)导入(Import)到程序当中.
模型通常由建模师在Blender、3DS Max或者Maya这样的工具中制作.
这些3D建模工具(3D Modeling Tool)可以让建模师创建复杂的形状,并使用一种叫做UV映射(uv-mapping)的手段来应用贴图.
这些工具将会在导出到模型文件的时候自动生成所有的顶点坐标、顶点法线以及纹理坐标.
这样即使不了解图形技术细节的情况下,也能拥有一套强大的工具来构建高品质的模型了.所有的技术细节都隐藏在了导出的模型文件中。但是,作为图形开发者,我们就必须要了解这些技术细节了.
…
…
我们的工作就是解析这些导出的模型文件以及提取所有有用的信息,将它们储存为OpenGL能够理解的格式。
一个很常见的问题是,模型的文件格式有很多种,每一种都会以它们自己的方式来导出模型数据,不同种类的文件格式有很多,它们之间通常并没有一个通用的结构,所以如果我们想从这些文件格式中导入模型的话,我们必须要去自己对每一种需要导入的文件格式写一个导入器。很幸运的是,正好有一个库专门处理这个问题。
模型加载库
一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写.
Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。
当使用Assimp导入一个模型的时候,它通常会将整个模型加载进一个场景(Scene)对象,它会包含导入的模型/场景中的所有数据。
Assimp数据结构的(简化)模型如下: