APP下载

3DS与OBJ格式的三维模型文件在OpenGL中的输入与处理

2013-12-10武警工程大学汪永刚

电子世界 2013年6期
关键词:关键字多边形顶点

武警工程大学 汪永刚

1.前言

OpenGL(开放图形库)作为一个开放的三维图形软件包,它独立于窗口系统和操作系统,基于OpenGL开发的应用程序可以十分方便地在各种平台间移植。OpenGL的功能包括:建模、变换、颜色模式设置、纹理映射、位图显示以及双缓存动画等,而且借助Windows编程环境可以方便地对所构模型的人机交互进行控制。由于其开放性和高度重用性,OpenGL已经成为业界标准[1]。

虽然OpenGL提供了一些建立形体模型的命令,但OpenGL并没有提供更为复杂的三维模型的高级命令。在这种情况下,如果完全通过基本的几何图元—点、线、多边形来构建模型,势必十分困难;另一方面,由于3D图形技术的发展,形成了非常多的3D建模软件,这些软件建模一般比较方便,但又难以对其进行控制和交互。因此,如何有效地利用这些资源,对于快速开发可视化系统具有非常重要的意义。

作者在本文中对两种流行的三维模型文件的文件格式进行了介绍,并通过程序实现了文件的读取。把这些文件转换成OpenGL程序,再对其进行控制和交互操作。

2.3DS文件的输入和处理

3D Studio Max是Autodesk公司开发的用于制作三维动画的应用程序,它所生成的图形文件格式是3DS文件格式。该软件建模方便,且功能强大。因此,可以利用3D Studio Max对构建可视化系统提供重要帮助。这里介绍一种将3DS文件转换成OpenGL文件的简单方法。

这种转换需要使用一个工具View3DS.exe(网上可下载)。转换时将3DS文件拖到View3DS上,将弹出一个窗口,在窗口中会显示需要转换的3DS模型。在窗口上单击鼠标左键,会弹出一个菜单,选择Export OpenGL CCode菜单项,将会在当前目录中生成OpenGL程序,包括与模型名相同的.h和.gl二个文件[2]。

生成C代码后,将模型的.h和.gl文件拷贝到当前建立的工程目录中,并在初始化部分加入以下代码:

Model=GL3DS_initialize_modelName();

ModelName是指对应于3DS模型的名称,上面函数定义在生成的模型.h文件中。该函数运用了显示列表的技术,可以提高显示的速度。在模型绘制文件的开始部分,加入如下代码:

#include“modelName.h”

最后,在绘制模型部分加入glCallList(Model),用OpenGL显示列表技术实现图形的显示和重现。

3.OBJ文件的输入和处理

OBJ文件是Alias/Wavefront公司开发的三维软件Maya的一种数据输出类型,它定义了对象的几何和其它的一些特性。由于它的文件结构非常简单,所以适合在应用程序中读取或进行3D文件格式转换[3]。

3.1 OBJ文件格式

OBJ文件既可以定义多边形模型,也可以定义自由曲面模型。多边形模型就是可以用点、线、面等基本元素构造的模型,而自由曲面模型是指使用参数曲面造型定义的模型。下面是某个OBJ文件的一部分

v-0.7081257-0.08592043-0.19173051

v-0.7081257-0.11188304-0.19173063

v-0.7081257-0.0989018-0.19266948

……

vn-0.01888834-0.65014-0.7556138

vn-0.017401185-0.52368283-0.8475712

vn-0.2399254-0.961792-0.075679004

从上面可以看出,OBJ文件由文本行组成,每一行文本都是由一个关键字开头,紧跟着后面是该关键字所表示含义的具体参数。例如,以“vn”开头表示该行描述一个顶点法向量信息,后面一定会跟三个Double型的具体参数,分别描述该顶点法向量的三维坐标信息表1列出了OBJ文件中主要的关键字及其具体含义[4]。

表1 OBJ文件的关键字及其含义

顶点数据类型主要提供模型的以下参数:

(1)顶点的几何坐标(v x y z w);

(2)顶点的纹理坐标(vt u v w);

(3)顶点的法向量(vn I j k);

(4)空间参数点的坐标(vp u v w)。

在OBJ文件中,点的坐标的确定是右手坐标系。

定义一个多边形的语法如下:

fv/vt/vn v/vt/vn v/vt/vn…,其中省略号部分表示可以定义任意多边的多边形。其中v表示顶点的几何坐标;vt表示顶点的纹理坐标;vn表示顶点的法向量,每个元素之间需用“/”符号隔开。例如,可用以下语句定义一个四边形:f1/1/1 2/2/2 3/3/3 4/4/4。如果只有顶点坐标和法向量坐标(不含纹理坐标),那就应该使用“//”将坐标隔开。例如只定义顶点坐标和法向量坐标的一个四边形:f1//1 2//2 3//3 4//4。

3.2 OBJ文件的输入处理

了解了OBJ文件的结构后,为了能在程序中读入模型,需要建立对应的模型数据结构。

程序中首先定义了OBJ文件对应的结构体,如对象顶点的结构体、材质描述结构体和总的模型描述结构体等。代码如下:

程序中定义了一个全局变量:ModelContext*model。又实现了一个类,将OBJ文件的内容读入到全局变量中。在该类中定义了一些读入函数

void readLineData(char*FileName);//读入线数据

void readObjData(char*FileName);//读其它对象数据

FILE* fileOpen(const char* filename,constchar*model);//打开文件

获取了全局变量后,就可以在视图类中绘制所得到的对象模型,然后对模型进行操作和交互式处理。

4.小结

本文简要介绍了3DS和OBJ两种3D文件格式在OpenGL中的输入和处理方法。现在3D文件资源十分丰富,要充分利用这些资源,文件格式的转换具有十分重要的意义。在转换为OpenGL程序后,就可以利用OpenGL的强大功能来进行三维分析和交互操作,其成果可以适用于地形建模、城市规划以及虚拟现实等许多领域。

[1]郭景,雷鸣.3DSMAX模型在OpenGL中的读取与重现[J].计算机应用,2009,5.

[2]胡平平,刘建明,王晶杰.OpenGL显示3DS模型若干问题的研究[J].工程图学学报,2010,8.

[3]向南平,江资斌,左廷英.OpenGL中Maya模型的应用[J].微型电脑应用,2009,18.

[4]王金峰,姚国清.三维模型文件中的OBJ格式在OpenGL中的输入与处理[J].电脑知识与技术,2011,4.

[5]陈炳发,陆楠,伍铁军.一种面向OpenGL的三维模型的转化方法[J].小型微型计算机系统,2010(25).

猜你喜欢

关键字多边形顶点
多边形中的“一个角”问题
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
过非等腰锐角三角形顶点和垂心的圆的性质及应用(上)
多边形的艺术
解多边形题的转化思想
成功避开“关键字”
多边形的镶嵌
智能垃圾箱
数学问答