0. 说明
写本文的初衷是能够更好的让自己理解,同时便于日后查询,对有相同需求且过去完全没有接触过OpenGL的开发者来说,也许能提供一定的帮助。
目前学习OpenGL也许是最好的教程是来自Joey de Vries的LearnOpenGL,很幸运,该文章也有对应的中文版LearnOpenGL CN。因此文章绝大部分文字教程来自翻译Joey de Vries的LearnOpenGL CN,由于原文已经相当出色,并不需要过多修改(当然也没有那个水平),我仅根据原文增减成适合Qt开发的教程,读者也可以自行查看原文或翻译好的中文版。
如果查看目录,可以点击这里。
1. Assimp
到目前为止的所有场景中,我们一直都在滥用我们的箱子朋友,但时间久了甚至是我们最好的朋友也会感到无聊。在日常的图形程序中,通常都会使用非常复杂且好玩的模型,它们比静态的箱子要好看多了。然而,和箱子对象不同,我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们想要的是将这些模型(Model)导入(Import)到程序当中。模型通常都由3D艺术家在Blender、3DS Max或者Maya这样的工具中精心制作。
这些所谓的3D建模工具(3D Modeling Tool)可以让艺术家创建复杂的形状,并使用一种叫做UV映射(uv-mapping)的手段来应用贴图。这些工具将会在导出到模型文件的时候自动生成所有的顶点坐标、顶点法线以及纹理坐标。这样子艺术家们即使不了解图形技术细节的情况下,也能拥有一套强大的工具来构建高品质的模型了。所有的技术细节都隐藏在了导出的模型文件中。但是,作为图形开发者,我们就必须要了解这些技术细节了。
所以,我们的工作就是解析这些导出的模