OpenGL踩坑总结3----模型加载篇
- 踩坑系列3,学习教程:LearnOpenGL 我的:代码仓库
1. assimp的dll丢失问题
- 最粗暴的办法就是将dll拷贝到存放项目exe的文件夹中,但是每个工程都要这么做就有些麻烦,毕竟只是学习而不是实际开发。
- 可以右键单击项目属性->配置属性->调试->环境中设置dll的路径,最好设置成相对路径,方便在另一台设备中运行代码。
- 我的代码仓库中dll的相对目录为:
- path = ..\..\OpenGLPackages\dlls\dlls_x64
- path = ..\..\OpenGLPackages\dlls\dlls_x86
- 由于这个仓库的项目都是debug开发模式,所以可以将这两个目录配置到系统的环境变量中,这样不用设置项目也能直接引用到dll
2. 教程代码的缺陷
- 当导入没有mtl或者缺少贴图的obj模型,这个模型就是一团黑,所以需要修改教程的代码让它支持这种模型:
- 在着色器代码中添加一个布尔变量,用来判断有没有贴图,没有mtl肯定就没有贴图,直接这么判断就好了
- 在光照函数中判断是否有贴图,有就采样贴图,没有就设定一个默认的颜色。以平行光(DirectionLight)为例,代码如下:
- Mesh类的Draw方法才是绘制模型的函数,需要设置着色器,所以在Draw方法中添加对是否有贴图的判断。不仅要设置has_texture,最好也设置下shininess,否则光照结果会出现异常。
- 最后看下没有贴图的模型加载出来是什么效果,嗯,还不错!
- 在着色器代码中添加一个布尔变量,用来判断有没有贴图,没有mtl肯定就没有贴图,直接这么判断就好了