捉虫日记:使用OpenGL加载模型 (2023/12/11)

发布时间 2023-12-12 00:08:31作者: overxus

  前天晚上,花了一个小时解决了编译Assimp时的报错问题,顺便写了篇随笔。今天继续OpenGL的学习,不出意料地再次踩坑,好在最后都解决了。

  今天主要学习使用Assimp加载模型,原理很简单:一个模型可以看作是许多个网格(Mesh)组成,只需要把这些Mesh画出来就好。写好代码后点击编译,出现了最让人咬牙切齿的一幕:只能看到背景色。

  说实话,这种情况比直接报错还难受,报错最起码还能大概知道错在哪儿。是贴图没有成功加载吗?如果只是贴图加载失败,应该会出现一块一块的黑色,不应该什么都看不到。

  在我的代码中,实现了一个Model类和一个Mesh类,其中Model类保存着一个Mesh类的vector.

  首先我采用的是“肉眼debug”, 一行一行地与参考代码比较,没找到问题。没办法,慢慢来吧。

  先检查Mesh类,自己编了一些数据,实例化一个Mesh对象,并把它画到屏幕上,果然还是看不到任何东西,这样的话,应该是Mesh类出了问题。

  最后找到了问题所在:绑定数据前,忘了绑定VAO. 加上下面这行代码:

glBindVertexArray(mVAO);

  点击运行,可以看到以下画面:

  太好了,终于有东西出来了!但我这个机器人看起来不太对劲:它应该有双红色的玻璃眼睛(图中看不到),而且这个机器人看起来不太完整,有些部位看上去少了些什么。

  这下应该是贴图的问题了吧,我又不自觉地联想到贴图上,但是经过测试,贴图文件都被正常读取。突然,我灵光一闪:这种效果好像在哪里见过?对了,是不是忘开深度测试了?

  检查代码,果然没有启用深度测试,加上下面这行代码:

glEnable(GL_DEPTH_TEST);

  启用后,模型正常显示:

  光是改这两个bug就花了两个小时,又是被自己蠢哭的一天,好气哦。