[DirectX]Assimp环境配置

       之前有提到过正在看DirectX Engine系列的视频,最近刚看完,发现这不是Engine的教程,应该算是DirectX11的教程,将近10多个小时的英文视频教程,还是学到了很多东西,一个算是ImGui(玩了一会,感觉很类似Unity的OnGUI), 另一个则是assimp(加载模型)吧。记得之前在这个网站学习DirectX11学习加载模型的时候,还得一步一步去解析顶点和索引数据。
       视频中用的assimp是通过exe安装后的,只有64位的dll,想来点骚操作,支持32位。去github上clone一份assimp,再用cmake生成32位和64位的lib和dll文件。
       cmake之前我也没有用过,记录一下,大神就无视好了:
       1.下载安装cmake就跳过了,先设置源代码目录,再设置生成目录(英文写的都蛮清晰明了的),再点击配置。

[DirectX]Assimp环境配置_第1张图片
       2.选择IDE,现在电脑上有vs17(虚幻4用)和vs19版本,我就选了vs2019,架构是32位和64位先选一个,等下在重新配置下。接着点击生成按钮,然后点击打开项目按钮就ok了。

[DirectX]Assimp环境配置_第2张图片
       3.接下来就是在visual studio中生成lib和dll就ok了,这一步应该没啥问题(编译超卡,卡了2,3分钟)。为了方便将dll和lib都存放在一个临时目录,后面有用到,记得备份一个config.h文件。目录是在生产目录下的include\assimp下(实在找不到,可以全局搜下)。debug和release的版本都ok了,那就回到cmake,删除缓存,再生成另外一个架构的dll和lib。

[DirectX]Assimp环境配置_第3张图片
       ok,得到了32位和64位的,debug和release版本的dll和lib。接下来就是配置了。先去环境变量中配置assimp的头文件目录和库文件目录,不好意思,用的是win7电脑(win10的话,环境变量看的比较清晰明了点)头文件目录就不做任何解释了,感觉没啥问题。

[DirectX]Assimp环境配置_第4张图片

[DirectX]Assimp环境配置_第5张图片
       库文件目录就需要一点配置,G:\_Code\_Tools\assimp\lib,这个目录你可以随便选的,不一定要跟我一样,我只是为了查找方便,然后创建2个文件夹x64和x86,在接着在新创建的2个文件夹中,再创建2个文件夹debug和release,剩下的步骤就是将.lib拷过来就行,不要搞错架构,还有就是xx.mtd.lib是debug的,xx.mt.lib是release的。

[DirectX]Assimp环境配置_第6张图片

       visual studio2019配置:
       1.生成目录:Output Directory改成$(SolutionDir)bin\$(Platform)\$(Configuration)\, Intermediate Directory改成$(SolutionDir)bin-int\$(Platform)\$(Configuration)\

[DirectX]Assimp环境配置_第7张图片
       2.头文件目录:Include Directories添加$(SolutionDir)DirectX_Engine\Include;$(DirectXTK_IncludePath);$(Assimp_IncludePath),其中$(SolutionDir)DirectX_Engine\Include是自己写的静态库的头文件目录,DirectXTK_IncludePath这是微软的DirectXTK库(跟Assimp_IncludePath配置是一样的,都是在环境变量中配置的)头文件目录不管架构都是一样的
       3.库文件目录:64位的添加Library Directoris添加$(SolutionDir)bin\$(Platform)\$(Configuration)\;$(DirectXTK_LibraryPath)\x64\$(Configuration)\;$(Assimp_LibraryPath)\x64\$(Configuration)\,其中$(SolutionDir)bin\$(Platform)\$(Configuration)\是自己写的静态库生成的lib目录,在1的生成目录中就有配置过。DirectXTK库的就不说了,跟assimp配置是一样的,记得上面lib存放的目录吗?      $(Assimp_LibraryPath)\x64\$(Configuration)\通过字符串的拼接获取了我们想要的lib目录。32位的稍微改下就好,所以不多做解释。这边有一个地方说下,没有用$(Platform)宏是因为有些lib目录是Win32,也有x86的,不好控制,只好写死。

[DirectX]Assimp环境配置_第8张图片
       你以为配置完了,没有,还漏了一步,记得之前备份的config.h文件吗,将其拷贝到Assimp_IncludePath目录中。
接着编译,你会发现丢失dll,虽然可以直接将dll拷贝到项目的目录中就可以解决这个问题,但是debug和release的切换,32位和64位的切换需要你重新拷贝dll,这很麻烦。网上查了下,可以将dll直接拷贝到C:\Windows的System32(这是64位的)和SysWOW64(这是32位的,不要被命名欺骗)目录下,就可以解决这个问题。
       然后再编译运行,32位和64位,debug和release模式都可以运行成功,得到下面的效果:

[DirectX]Assimp环境配置_第9张图片
       但是发现这样运行好像有点卡。继续google下,找到一个比较好的方式,修改下:
       1. 在项目目录下添加dll文件,在跟之前assimp的lib目录的配置一样,根据架构,debug和release放入dll文件

[DirectX]Assimp环境配置_第10张图片
       2. visual studio配置:在Post Build Event添加如下命令XCOPY "$(SolutionDir)"Dll\$(Platform)\$(Configuration)\*.dll "$(TargetDir)" /D /K /Y

[DirectX]Assimp环境配置_第11张图片
       3. 在Extensions to Delete on Clean中添加*.dll。

[DirectX]Assimp环境配置_第12张图片
       再把之前存放在C:\Windows的System32和SysWOW64目录中的assimp的dll文件删除,再继续编译,ok没问题。
       这都是自己用到现在的配置方式(真正的C++开发没有搞过,见谅,一直都是google,然后怎样方便怎样来),大神估计有其他方式,如果配置有问题的话,大佬可以指出来。
参考:

How do I use a third-party DLL file in Visual Studio C++?

你可能感兴趣的:(DirectX)