第十二课,assimp模型加载(配置篇)

下载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");

报错

  1. 在先前的stb_image.h文件里,如果不添加 #define STB_IMAGE_IMPLEMENTATION 会报错
    LNK2019 无法解析的外部符号 _stbi_load , _stbi_image_free
  2. 在如下报错中

在这里插入图片描述
是因为生成的lib和dll是X64版本,而项目运行版本是win32,不兼容导致无法解析外部命令。

在这里插入图片描述
所以需要在cmake中重新生成Win32版本的lib和dll。

  1. 如果将dll文件放入lib文件内,那么会报如下错误。

在这里插入图片描述
编译出的静态库(lib)其实里面只有定义,真正实现还是要去动态库(dll)去找,所以当你把它们放进项目配置里时,编译是通过的,但是动态库并不会打进程序里,所以你得把动态库放到项目工程目录下,也就是其实你需要把静态库放进项目配置中,而动态库放在项目目录中。

DLL搜索顺序:
当前进程的可执行模块所在的目录。
当前目录。
Windows 系统目录。GetSystemDirectory函数检索此目录的路径。
Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
PATH环境变量中列出的目录。
因此,放到以上任意一个目录下都可以。最简单的是第1个,放到exe文件所在的目录下

注意:glfw3.lib为静态编译库,索引和实现都在其中,所以没有dll文件。而glfw3.dll是与glfw3dll.lib作为动态链接库的。

最终解决问题后的结果如下

在这里插入图片描述
可以看出问题成功解决

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片