本来今年过年之前,我就在看opengl教程,然后就卡在了装assimp上面,心存侥幸的跳过了先看后面结果发现还是绕不过这个。模型加载库assimp的配置,果然是不得不克服的一个点,我从昨天下午开始搞,碰了很多次璧,今天上午终于配好了。
凸(艹皿艹 )这玩意太TM难了!!!!!我一定要记录下来!!!
趁着我还记得(如果不记下来的话感觉下次就搞不出来了 o(╥﹏╥)o)
开始吧!
首先,我的opengl教程是这个(opengl教程assimp),但他说的很简略,就说用cmake自己编译Assimp。我之前装glfw的时候就绕过了用cmake自己编这个步骤,行吧该学的总要学会的。
因为这个教程过于简略,我就换了一个教程参考:(非常感谢wodownload2这位大佬的教程:地址→(assimp编译及使用(1))
前面几个步骤都是OK的,我截图贴过来了:
第一步:下载assimp源码
下载完解压,得到:
。。。
这里的build文件夹需要自己手动建个空的(上图蓝框)。
第二步:用CMake编译assimp工程
这个第二步就有点复杂了。首先需要安装一个cmake。这个随便搜一个安装就行,啥版本都不重要,我电脑里已经装过3.9版本。接下来要用的是下图中的Cmake(cmake-gui) 这个带界面的cmake,下面的是用命令行的(有点虚命令行所以不用)
Cmake-gui打开如下:蓝框里的是要自己填的路径,分别填入:刚下载的assimp解压到的位置(源代码的输入路径),以及自行创建的build文件夹路径(用来存放cmake的输出)
然后点击左下角的configure按钮,弹窗时选择自己的VS版本。
我是选的VS2015,没选win64那项,因为我照着写opengl教程的时候,一直是在debug/x86条件下run的(我的opengl项目如下图),所以cmake的时候怕出问题所以也保持了一致。
点击finish,就会自动开始跑了。
注意上图的蓝框,运行过程中如果报错了都会显示在这里。运行完后蓝框上方会出现很多条红色的项目,不用管它。
第三步(可能会需要):assimp编译过程中提示没找到DirectX
这是我的运行过程中提示没找到DirectX的部分:
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
Looking for DirectX...
DirectX_PREFIX_PATH changed.
Could not locate DirectX
【这里一般都会看到could not locate DirectX。这是因为现在电脑里没有安装DirectX】
DirectX下载地址:DirectX官方下载 (是个傻瓜式一键安装的.exe)
但是在等directX自动安装时,可能会弹窗遇到一个错误码为s1023的错误(我就碰到了),提示安装失败。这个错误的解决方法在这个链接→(s1023错误)里,是英文的,我翻译成中文说一下就是:
1. 卸载: Visual C++ 2010 Redistributable Package version 10.0.40219
在控制面板里像卸游戏一样卸,注意看清楚一定要把x86和x64两个都卸载了(看清楚是2010,还有很多其他年份的名字很相似的,别搞错了)
2. 再次傻瓜式一键安装之前下载好的DirectX安装包
3. 装完DirectX后,重新把刚刚卸载掉的两个东西装上(Visual C++ 2010 Redistributable Package→下载地址)
X86 x64都安排上。也是一键安装的那种,不用做啥。(我这边安装时提示我说可以选择修复,然后我就点了修复,好像没啥毛病)
三步走下来,DirectX应该就装好了。然后我们回到主线cmake这边继续搞assimp
第四步:装完DirectX再次configure
再点一次configure, 会看到所有的标红都变白了,继续紧盯下方的运行状态:
Looking for DirectX...
DirectX_PREFIX_PATH changed.
这两句话后面不再是could not locate了,而是变成已经找到DirectX了。这就证明我们刚刚directX装好了。
然后下面还有一个ZLIB也是could not locate,但是他下一句话说了正在从源码编译zlib,我在查阅资料的过程中看到有人这里报了红色的错(没仔细看是啥,但像我上图这样没报错的话就应该是ZLIB项自行解决了吧)。
第五步,打开cmake生成的代码并编译
下一步是点击open project,会自动用VS2015打开它,打开后的项目结构是这样的:
然后要注意一下这里最好也选win32,(和上面一样,为了和我写opengl教程例子保持一致 )
然后编译一次这个代码(就在vs2015里面编)ctrl+alt+f7
编完就算cmake这步做完了(我这提示成功7个失败1个跳过3个)。
第五步:编译好的assimp库在opengl例子代码中使用
到这里,安装部分已经做完了,就剩下怎么在opengl例子里用上刚编的assimp库了。
首先去到assimp的编译结果build文件夹里
需要的dll和lib文件都在这个code文件夹里面,刚刚编译的时候选的debug模式,所以自动生成的东西都在debug文件夹里,如果是release模式下编译就会生成一个release文件夹,这两个模式都可以,随便用。
把这俩.dll和.lib文件粘出来,粘到正在写的opengl代码项目里和.exe一级的地方(如下图)
(这里我本来是想和glfw的dll lib粘到一起然后进项目配置路径的,但是我这样操作之后,虽然代码编译通过了,但运行时提示我找不到assimp-vc140.dll,这是为什么鸭?如果有人知道可以评论告诉我一下),然后我才选的粘到了和.exe同级的位置,这样才run成功的。
assimp对应的Lib 和dll粘完之后,再去粘.h文件,assimp对应的.h们都在和build文件夹同级的include文件夹这里,直接把整个assimp文件夹复制到和其他几个glfw一起的include路径。
我是复制到了下图这个位置,因为我们写opengl肯定也用了些其他的库的头文件,glfw glad glm之类的。我就把assimp和他们一起都放在了这一个include文件夹里(到时候再VS2015里给项目配置一下路径就行,这个在最初装glfw的时候就操作过,但我等下还是会再写出来一次)
好现在头文件也粘完了,回到VS2015看需要使用assimp的目标项目。给他配置一番:
右键打开项目属性。VC++目录里配置这两条,包含目录对应着存放.h文件们的目录,库目录对应着放.dll .lib文件的目录。填好刚刚我们把.dll和.lib文件粘进去的地方。库目录是.h文件粘进去的地方。
还有【链接器-输入】选项卡中的附加依赖项:
把assimp加上(前面的opengl32.lib和glfw3.lib是之前就自己加过的其他库,装assimp的时候我就只加了下图红框中的第三行assimp的lib)
Ok,fine
然后就可以run起来了。就成功了!✿✿ヽ(°▽°)ノ✿
网友评论