在学习opengl时,有一章 Assimp 要使用到 Assimp库加载3D模型,需要编译Assimp库,这里做一个记录。
大体上参考 Assimp的安装编译及使用过程全纪录(VS2015) 这篇文章。
这篇文章是接上一篇文章 OpenGL环境搭建 的,会用到上一篇文章的一些东西(Includes和Libs目录)。
1、下载Assimp源码
2、用CMake编译Assimp工程
(1)解压源码,然后创建个build文件夹:
(2)安装个CMake,CMake下载,根据系统,这里下载windows 64位:
安装时无脑next就行了,最多修改个安装路径,安装完后,打开gui界面,
在第3步,点Configure的时候,会弹出来一个窗口,选择visual studio版本和系统版本(64位系统选x64)
然后可能会出现一个错误,说没找到DirectX:
这个看 这篇文章第三步 的方法吧,很顺利就解决。
装完DirectX再次Configure,就没什么问题了(有些红色的警告,但没影响)。
(3)Configure完后,点Generate,再点Open Project,visual studio会打开一个项目,这个项目其实就是build目录下的 Assimp.sln :
注意下面圈起来的地方,应该要跟你的系统版本一样,我这里是x64。
然后点生成解决方案:
等一段时间后,编译完成,7成功,1失败,3跳过:
编译完成后,在build/code/Debug目录下就能看到生成的 assimp-vc140-mt.lib 和 assimp-vc140-mt.dll 文件了
3、添加头文件、.lib、.dll到vs项目中
(1)把 assimp-vc140-mt.lib 这个文件放到opengl_thirdparty/Libs目录里(关于这个目录,要看上一篇文章 OpenGL环境搭建 1.3链接 ):
(2)然后把跟build目录同级下的include目录下的assimp文件夹,
放到opengl_thirdparty/Includes目录下(关于这个目录,要看上一篇文章 OpenGL环境搭建 1.3链接 ):
(3)然后在visual studio项目中,在vs的属性的VC++目录里,添加如下:
在连接器的输入里,添加依赖项 assimp-vc140-mt.lib如下:
(4)最后,要把 assimp-vc140-mt.dll 这个文件,放到跟项目生成的 .exe 程序同目录下。
在我这里,我的项目名称叫LearnOpenGL,结构如下:
而项目运行后生成的 .exe 程序,就在 LearnOpenGL/x64/Debug 下面,把assimp-vc140-mt.dll 放这里就行了:
关于.h头文件,.lib文件,.dll文件的关系,我的理解;
(1).h头文件是编译时必须的,lib文件是链接时必须的,dll时运行时必须的。
(2)当项目是静态链接时,只会生成lib文件,不会产生dll文件;函数代码和函数位置索引都存在lib里,生成exe可执行程序时,会把lib文件都包含进来(这就可能会把同一个函数代码重复包含多次)。
(3)当项目是动态链接时,会产生lib文件和dll文件;dll文件存函数代码,lib文件存函数位置索引(告诉exe程序,某一个函数代码存在dll文件中的哪个位置),在生成exe可执行程序时,只会包含lib,而不包含dll。在运行exe程序时,才会动态的调用dll文件里的函数代码;因此在exe运行时,必须要有dll文件。
参考:https://wenku.baidu.com/view/81f4c15c312b3169a451a423.html
4、运行
复制教程的代码(这里要看英文版本的,中文版本的没有更新),https://learnopengl.com/Model-Loading/Model,克服对英语的恐惧,直接拉到最下面,点击下面这个here,下载3d模型:
源代码在这里:https://github.com/JoeyDeVries/LearnOpenGL/tree/master/src/3.model_loading/1.model_loading
复制到项目里,改一改,添加头文件,然后就能运行了(运行后可能会卡住一下,等一下就行了):