第三部分开始啦
第三部分学习主要是靠[傅老師/OpenGL教學 第三章] [01/08晚間更新] OpenGL自製3D遊戲引擎(已更畢)
本节笔记对应官网学习内容:Assimp

到目前为止的所有场景中,我们一直都在用我们的箱子。
在日常的图形程序中,通常都会使用非常复杂且好玩的模型,它们比静态的箱子要好看多了。
然而,和箱子对象不同,我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。
我们想要的是将这些模型(Model)导入(Import)到程序当中。
模型通常都由3D艺术家在Blender、3DS Max或者Maya这样的工具中精心制作。

这些所谓的3D建模工具(3D Modeling Tool)可以让艺术家创建复杂的形状,并使用一种叫做UV映射(uv-mapping)的手段来应用贴图。
这些工具将会在导出到模型文件的时候自动生成所有的顶点坐标、顶点法线以及纹理坐标。
这样子艺术家们即使不了解图形技术细节的情况下,也能拥有一套强大的工具来构建高品质的模型了。
所有的技术细节都隐藏在了导出的模型文件中。
但是,作为图形开发者,我们就必须要了解这些技术细节了。

所以,我们的工作就是解析这些导出的模型文件以及提取所有有用的信息,将它们储存为OpenGL能够理解的格式。
一个很常见的问题是,模型的文件格式有很多种,每一种都会以它们自己的方式来导出模型数据。
像是Wavefront的.obj这样的模型格式,只包含了模型数据以及材质信息,像是模型颜色和漫反射/镜面光贴图。
而以XML为基础的Collada文件格式则非常的丰富,包含模型、光照、多种材质、动画数据、摄像机、完整的场景信息等等。
Wavefront的.obj格式通常被认为是一个易于解析的模型格式。
建议至少去Wavefront的wiki页面上看看文件格式的信息是如何封装的。这应该能让你认识到模型文件的基本结构。

总而言之,不同种类的文件格式有很多,它们之间通常并没有一个通用的结构。
所以如果我们想从这些文件格式中导入模型的话,我们必须要去自己对每一种需要导入的文件格式写一个导入器。很幸运的是,正好有一个库专门处理这个问题。

1 模型加载库/构建Assimp

Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写
。Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。
当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。
由于Assimp的数据结构保持不变,不论导入的是什么种类的文件格式,它都能够将我们从这些不同的文件格式中抽象出来,用同一种方式访问我们需要的数据。
当使用Assimp导入一个模型的时候,它通常会将整个模型加载进一个场景(Scene)对象,它会包含导入的模型/场景中的所有数据。
Assimp会将场景载入为一系列的节点(Node),每个节点包含了场景对象中所储存数据的索引,每个节点都可以有任意数量的子节点。
Assimp数据结构的(简化)模型如下:
LearnOpenGL学习笔记—模型加载01:	Assimp
点击VS的 工具 这一栏,点击 NuGet包管理器,点击 管理解决方案的NuGet程序包
在 浏览 中搜素 assimp
找到第一个,勾选安装.
做完这一步就没问题了。

相关文章: