下载Assimp并使用cmake配置
OpenGL-Assimp库的下载、编译及使用
本人亲测,在自己电脑上不需要DirectX的安装。估计和电脑版本有关,读者自己斟酌是否需要。
cMake及VS编译要尤其注意版本(win32版本)。下面会介绍版本错误引发的错误。
OpenGL-使用Assimp加载3d模型
生成的lib和dll文件的配置信息都在里面。
下面说说我在配置时出的错误及解决方法:
首先复制粘贴Model.h及Mesh.h两个类
https://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/mesh.h
https://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/model.h
在主函数中引入模型类
#include "Model.h"//模型载入类
报错解决:
问题:
- ****已有主题
- ****未声明标识符
- 重定义
- 无法解析函数重载
解决方案:
“stb_image.h"这个头文件不能重复include。
在"Model.h"类中已经include了一次stb_image.h,如果在main文件中include了stb_image.h,又include了Model.h,就会出现这种问题。
删除(注释)main函数中的stb_image.h即可解决。
载入模型
Model ourModel("图形位置+名称.obj");
报错
- 在先前的stb_image.h文件里,如果不添加
#define STB_IMAGE_IMPLEMENTATION
会报错
LNK2019 无法解析的外部符号 _stbi_load , _stbi_image_free。 - 在如下报错中
是因为生成的lib和dll是X64版本,而项目运行版本是win32,不兼容导致无法解析外部命令。
所以需要在cmake中重新生成Win32版本的lib和dll。
- 如果将dll文件放入lib文件内,那么会报如下错误。
编译出的静态库(lib)其实里面只有定义,真正实现还是要去动态库(dll)去找,所以当你把它们放进项目配置里时,编译是通过的,但是动态库并不会打进程序里,所以你得把动态库放到项目工程目录下,也就是其实你需要把静态库放进项目配置中,而动态库放在项目目录中。
DLL搜索顺序:
当前进程的可执行模块所在的目录。
当前目录。
Windows 系统目录。GetSystemDirectory函数检索此目录的路径。
Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
PATH环境变量中列出的目录。
因此,放到以上任意一个目录下都可以。最简单的是第1个,放到exe文件所在的目录下
注意:glfw3.lib为静态编译库,索引和实现都在其中,所以没有dll文件。而glfw3.dll是与glfw3dll.lib作为动态链接库的。
最终解决问题后的结果如下
可以看出问题成功解决
暂无评论内容