OpenGL模型加载之Assimp的安装编译配置设置等

参考:

https://learnopenglcn.github.io/03%20Model%20Loading/01%20Assimp/

前言

一般像汽车,房子或者人形角色这样的复杂形状,如果是自己手动定义所有的顶点、法线和纹理坐标,显然不太可能。
我们想要的是将这些模型(Model)导入(Import)到程序当中.
模型通常由建模师在Blender3DS Max或者Maya这样的工具中制作.
这些3D建模工具(3D Modeling Tool)可以让建模师创建复杂的形状,并使用一种叫做UV映射(uv-mapping)的手段来应用贴图.

这些工具将会在导出到模型文件的时候自动生成所有的顶点坐标、顶点法线以及纹理坐标.
这样即使不了解图形技术细节的情况下,也能拥有一套强大的工具来构建高品质的模型了.所有的技术细节都隐藏在了导出的模型文件中。但是,作为图形开发者,我们就必须要了解这些技术细节了.


我们的工作就是解析这些导出的模型文件以及提取所有有用的信息,将它们储存为OpenGL能够理解的格式。

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

模型加载库

一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写.
Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。

当使用Assimp导入一个模型的时候,它通常会将整个模型加载进一个场景(Scene)对象,它会包含导入的模型/场景中的所有数据。
Assimp数据结构的(简化)模型如下:
OpenGL模型加载之Assimp的安装编译配置设置等
和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中。Scene对象也包含了场景根节点的引用。

场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。

Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中网格数组的索引。

一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。

一个网格包含了多个面Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的,使用一个索引缓冲来渲染是非常简单的

最后,一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。

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

构建Assimp

第一步先下载Assimp源码

Assimp地址:https://github.com/assimp/assimp/releases/tag/v3.3.1/
进去之后,拉到下面:
OpenGL模型加载之Assimp的安装编译配置设置等
选择OpenGL模型加载之Assimp的安装编译配置设置等
下载完之后得到这样一个压缩包:
OpenGL模型加载之Assimp的安装编译配置设置等
然后解压得到这样的文件夹:
OpenGL模型加载之Assimp的安装编译配置设置等
由于我们要使用Cmake,如果你没有Cmake,可以进去这个网站下载:
https://cmake.org/download/
在assimp-3.3.1文件夹里面创建一个空的build文件夹,接下来会用到。
OpenGL模型加载之Assimp的安装编译配置设置等
然后在OpenGL模型加载之Assimp的安装编译配置设置等
打开带有gui的应用程序
OpenGL模型加载之Assimp的安装编译配置设置等
找到刚才下载好的assimp文件夹,如下面图所示
OpenGL模型加载之Assimp的安装编译配置设置等
路径设置好后,点击左下角的configure
OpenGL模型加载之Assimp的安装编译配置设置等
然后会弹出一个框,选择你自己的vs版本,我的是vs2017根据个人情况
OpenGL模型加载之Assimp的安装编译配置设置等
然后点击Finish
OpenGL模型加载之Assimp的安装编译配置设置等
然后有可能会提示找不到DirectX
OpenGL模型加载之Assimp的安装编译配置设置等
这个时候需要自己手动下载DirectX
DirectX官网
进入官网,直接点击Download,大概500多M
OpenGL模型加载之Assimp的安装编译配置设置等
下载完后,设置一下你自己的路径,就可以一直下一步了。
最后如果没问题的话,你应该会有以下的报错。
OpenGL模型加载之Assimp的安装编译配置设置等
这种情况下,请在安装SDK之前先卸载 Visual C++ 2010 Redistributable Package version 10.0.40219
在控制面板里面
OpenGL模型加载之Assimp的安装编译配置设置等
找到
OpenGL模型加载之Assimp的安装编译配置设置等
OpenGL模型加载之Assimp的安装编译配置设置等
这两个然后卸载了
注意X86和X64都要卸载
然后在重新安装,这个时候就安装成功了, 然后重新把刚刚卸载掉的c++2010重新安装

进入网站,可以选择中文,然后点击下载
OpenGL模型加载之Assimp的安装编译配置设置等
OpenGL模型加载之Assimp的安装编译配置设置等
选择图示里面的两个进行下载。
下载完后一键安装就行了。

接下来再次configure

OpenGL模型加载之Assimp的安装编译配置设置等
可以看到已经找到了,然后选择生成
OpenGL模型加载之Assimp的安装编译配置设置等
然后点击OpenGL模型加载之Assimp的安装编译配置设置等
打开项目,
然后选择
OpenGL模型加载之Assimp的安装编译配置设置等
生成后,打开
OpenGL模型加载之Assimp的安装编译配置设置等
OpenGL模型加载之Assimp的安装编译配置设置等
选中这两个 放入相应的目录下,并在解决方案中链接它们
OpenGL模型加载之Assimp的安装编译配置设置等
把这个文件夹放入你的include文件夹里面
然后设置一下你的库目录
OpenGL模型加载之Assimp的安装编译配置设置等
最后
OpenGL模型加载之Assimp的安装编译配置设置等
在链接器输入的附加依赖项 加上assimp的lib