本章节将学习如何从.obj文件加载静态3D模型。通常在游戏内不会想要使用.obj文件,因为它们不包含动画,且它们是ascii格式的,所以它会比其他格式的文件比如.3ds的要大一些,但是这是一个用于学习如何加载模型的好起点。
本章基于聚光灯构建。
和.obj文件一起的是.mtl文件,它是一个材质库。还会学习使用.mtl文件来为模型加载材质。.obj文件很大并且没有包含动画,所以通常会想要给游戏使用一个不同的模型格式。然而,.obj格式是一个学习如何加载模型的很好的文件。
.obj文件格式
.obj格式文件已经存在很长一段时间。它是三大最老的模型格式之一,现在仍然广泛使用。
.obj文件不包含类似其他文件格式的头信息。头信息位于文件的开头,会给人一点关于文件的信息。比如,在一个3D模型文件内的头可能告诉你在文件内有多少顶点,纹理坐标,法线,材质,子集以及面。由于.obj文件不包含这个信息,我们能够使用后面的两种方式中的一种。第一件事就是可以读该文件两次。第一次读会收集信息,这些信息包括多少个顶点,面,法线等。还有,所以我们能够为每条信息初始化矩阵。第二次读取会获取实际模型信息,比如顶点位置,并将它们存储在一个初始化的数组中,这是一种很低效的方式来获得向量。第二种方式就是我们能够加载一个obj文件并使用向量来实现。一个向量是一个动态数组,不是使用一个设置大小来初始化它