使用3D模型

使用3D模型
通过前6章的学习你应该完全掌握了使用OpenGL绘制物体的所有内容。这包括对基本图元的渲染,颜色和光照以及上一章所讲述的纹理贴图。运用上面的知识,我们已经具备了完整的渲染任何一个3D模型的能力。但在真正的游戏中,我们要绘制的3D物体往往十分复杂,对于这样的情况,使用代码来创建模型显得即复杂又不直观,难以调试。因此,我们通常的做法都是在专门的建模工具(如3DS Max, Maya等)中创建模型,再将模型导出为特定的格式,然后在我们的程序载入这个模型。这正是本章的主题:3D模型。
在计算机平台上,常用的3D模型有3DS、OBJ、MD2、MD3、MDL等多种格式。这些格式在存储方式存在很大的差别,但基本思想大同小异。3D模型又分为动态模型和静态模型。在动态模型中除了保存模型的定点和表面数据之外,还有与动画相关的信息。这些动态模型在渲染起来较为复杂。在这里,我们只介绍一种简单的静态模型格式–OBJ模型。
学习本章,你将了解:

使用建模工具创建模型并输出为OBJ格式

OBJ模型文件的文件格式

用于存储材质的MTL文件格式

载入OBJ模型

渲染模型

7.1 使用建模工具创建模型
要渲染一个模型,首先要有一个模型文件。目前绝大多数流行的建模软件都支持将模型输出为OBJ文件。这里以3DS Max为例,介绍创建OBJ模型的方法。
首先,启动3DS Max,并向往常一样创建模型。如图7.1-1所示。
模型创建完后,执行文件(File)菜单->导出(Export)命令。在弹出的保存对话框中,输入文件名,并在”保存类型”项中,选则”Wavefront Object (*.obj)”项。
如图7.1-2所示。

图7.1-1 使用3DS Max创建模型

图7.1-2 保存文件

单击”保存”按钮后,会弹出如图7.1-3所示的选项对话框。

图7.1-3 设置模型文件参数

在这里,请注意在Faces栏中,选择Triangles以使用三角形作为基本图元。还要注意钩去Relative Vertex一项,禁止使用相对顶点索引。这是因为在后面的程序中,我们将不考虑相对顶点索引以简化代码。
单击”OK”按钮后,会紧接着弹出另一个选项对话框,如图7.1-4所示。

图7.1-4 设置材质文件参数

这一步是在设置与此OBJ文件对应的MTL文件(用于保存材质信息),注意要选择”Scene”并勾选”Export”复选框。然后单击”OK”按钮完成设置。这样,在指定的文件夹下,我们得到了两个文件:一个*.OBJ文件,存储了模型的顶点、法线和纹理坐标信息;一个*.MTL文件,存储了该模型所用的材质信息。
7.2 OBJ文件格式
OBJ文件格式是非常简单的。这种文件以纯文本的形式存储了模型的顶点、法线和纹理坐标和材质使用信息。OBJ文件的每一行,都有极其相似的格式。在OBJ文件中,每行的格式如下:

前缀 参数1 参数2 参数3 …

其中,前缀标识了这一行所存储的信息类型。参数则是具体的数据。OBJ文件的前缀可以有:

表7.2-1 OBJ文件中的前缀

前缀

说明

v
表示本行指定一个顶点。 此前缀后跟着3个单精度浮点数,分别表示该定点的X、Y、Z坐标值

vt
表示本行指定一个纹理坐标。 此前缀后跟着两个单精度浮点数。分别表示此纹理坐标的U、V值

vn
表示本行指定一个法线向量。 此前缀后跟着3个单精度浮点数,分别表示该法向量的X、Y、Z坐标值

f
表示本行指定一个表面(Face)。 一个表面实际上就是一个三角形图元。此前缀行的参数格式后面将详细介绍。

usemtl
此前缀后只跟着一个参数。该参数指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称。该材质可以在此OBJ文件所附属的MTL文件中找到具体信息。

mtllib
此前缀后只跟着一个参数。该参数指定了此OBJ文件所使用的材质库文件(*.mtl)的文件路径

我们使用3DS Max创建了一个长方体,并保存为OBJ格式。用写字板打开这个OBJ文件,可以看到如下内容:

# Max2Obj Version 4.0 Mar 10th, 2001 # mtllib ./Box.mtl g # object (null) to come … # v -46.508743 -45.052959 50.796341 v 49.442947 -45.052959 50.796341 v -46.508743 -45.052959 -48.019585 v [...]

News, OpenGL