logo资料库

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

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
ISSN 1009-3044 第 7 卷第 10 期 (2011 年 4 月) Computer Knowledge and Technology 电脑知识与技术 Vol.7, No.10, April 2011,pp.2393-2396,2399 E-mail: eduf@cccc.net.cn Computer Knowledge and Technology 电脑知识与技术 http://www.dnzs.net.cn Tel:+86-551-5690963 5690964 三维模型文件中的 OBJ 格式在 OpenGL 中的输入与处理 王金峰,姚国清 中国地质大学 北京 北京 ( ), 100083) ( 摘要 :介绍了当今流行的三维作图工具 Maya,阐述了 Maya 生成的 OBJ 三维格式 ,如 何 将 OBJ 格 式 文 件 在 OpenGL(Open Graphic Library)中进行输入和处理。 重点介绍了 OBJ 文件的文件格式及怎样利用程序代码来构建模型数据结构 、绘制对象模型,然后运用 OpenGL 的强大功能实现三维显示和交互操作。 关键词:三维模型文件;OpenGL;OBJ 文件;交互 中图分类号:TP391 文章编号:1009-3044(2011)10-2393-04 文献标识码:A Obj Three-dimensional Model File Format in OpenGL, Input and Processing WANG Jin-feng, YAO Guo-qing (China University of Geosciences, Beijing 100083, China) Abstract: Introduced the three-dimensional mapping tools of today's popular Maya, expounds the Maya 3d format OBJ generated, The file formats of 3D files OBJ is introduced and the way show to transfer 3D model files to OpenGL are discussed. The paper lays a strong emphasis on the file formats of OBJ file and how to use code to form the modeling data structure and how to paint the object models. Then the powerful function of OpenGL can be used to 3D display and interactive operation. Key words: 3D model file; OpenGL; OBJ file; interact 1 概述 即开放性图形库 是一个三维的计算机图形和模型库 发的 OpenGL IRIS GL, OpenGL 为使其能适用于多种硬件 ,SGI 适用于多种硬件平台及操作系统 , (Open Graphic Library), 。 出高质量的动画效果 作为自己的图形标准 程序可以十分方便地在各种平台间移植 效率高 由于 从而使 OpenGL OpenGL , 。 开发了 OpenGL, 1992 7 并于 年 月发布了 用户用这个图形库不仅能方便的制作出有极高质量的静止三维彩色图像 在三维真实感图形制作中具有优秀的性能 许多大公司 如 成为了新一代的三维图形工业标准 它独立于窗口系统和操作系统 ;OpenGL 可以与 Visual C++ 紧密接口 可保证算法的正确性和可靠性 。 , , ( Microsoft、IBM、DEC、SUN 还能创建 , 等 都将其 以它为基础开发的应用 使用简便 ) ;OpenGL , , 。 它的前身是 版本 OpenGL1.0 。 公司为其图形工作站开 SGI 具有许多实用 颜色模式设置 、 编程环境可以方便地对所构模型的人机交互进行控制 高效的功能 建模 变换 如 、 、 、 , : 光照与材质设置 纹理映射 、 、 位图显示以及双缓存动画等 而 。 公司开发的三维动画软件 已在全世界广泛用于影视 虚拟仿真等领域 , 集成了 视频 商业产品 最先进的动画及数字效果技术 游戏 、 、 、 。 Maya Aliaso/Wavefront 而且还与最先进的建模 毛发渲染 在目前市场上用来进行数字和三维制作的工具中 数字化布料模拟 、 、 、 运动匹配技术相结合 是首选解决方案 ,Maya 即用许多小多边形拼出模型的外观 文件中保存这些多边形的信息 因此可以方便地从三维图形数据文件中读取模型数据并在 。 由于 中绘制[1]。 OpenGL OpenGL 、 。 、 宽带 本地 它不仅包 可在 。 Maya 。 Maya Win- 模型数据的 中提供了最基 。 , OpenGL Windows 且借助 2 Maya 软件简介 是位于加拿大的 Maya Aliaso/Wavafront 高端广播 化娱乐 括一般三维和视觉效果制作的功能 多种图形运用 、 、 、M TV、 , 操作系统上运行 。 与 SGIIR IX dows NT 输出方法中提供了多边形逼近法 , 本的有多边形构造三维模型的方法 3 OBJ 文件格式简介 , 文件是 OBJ Alias/Wavefront 于它的文件结构非常简单 这里的 模型文件 3D 名是 3.1 OBJ 文件格式 .mod,ASCII 公司开发的三维动画软件 的一种数据输出类型 它定义了对象的几何和其它的一些特性 由 。 , 所以适合在应用程序中读取或进行 3D OBJ[2]文件不是我们常见的程序编译生产的目标文件 后来被广泛应用到各种应用软件中 , 。 OBJ , Maya , 文件格式转换 而是一种定义物体几何模型的 。 文件可以是二进制文件 也可以是 , ASCII 格式文件的扩展名是 .obj。 文件 最初是 的标准 其中二进制格式文件的扩展 Wavefront , 3D 文件 , Maya VRML2。 的 开 放 系 统 输 出 数 据 文 件 类 型 有 其中 模型文件为文本类型 OBJ , , 结构比较简单 MEL,DXF,Explore,Geo,OBJ, IGES, Aliaswire,Aiff,Image,RIB,MOV (Aaciimotion), 点与点如 它保存的是一些多边形的信息 诸如顶点点几何坐标 纹理坐标 , 、 , 收稿日期:2011-02-16 作者简介:王金峰(1987-),男,河北成安人,硕士,计算机图像处理;姚国清,教授,硕士。 本栏目责任编辑:唐一东 多媒体技术及其应用 2393
、 。 OBJ 文件的基本结构[4]。 OBJ , 文件由一行行文本组成 记字母也就是关键字 行最后添加一个连接符 下列关键字可以在 顶点数据 (\)。 OBJ (Vertex data): (Keyword) , 几何体顶点 贴图坐标点 顶点法线 参数空格顶点 v: Vt: Vn: Vp: 自由形态曲线 (Geometric vertices)。 (Texture vertices)。 (Vertex normals)。 Deg: Bmat: Step: cstype 元素 点 线 面 度 (Degree)。 基础矩阵 步尺寸 (Step size)。 曲线或表面类型 (Basis matrix)。 (Free-form curve)/ (Parameter values ) (Surface) (2D curve) (Curve) 曲线 (Elements): (Point) (Line) (Face) 曲线 P: L: F: Curv: curv2 2D: 表面 surf: 自由形态曲线 参数值 外部修剪循环 内部整修循环 特殊曲线 Parm: Trim: Hole: Scrv: sp: end: 自由形态表面之间的连接 特殊的点 结束陈述 (Special point) Con: 成组 G: S: Mg: O: 显示 连接 (Connect) (Grouping): 组名称 光滑组 合并组 对象名称 (Group name) (Smoothing group) (Merging group) (Object name) 渲染属性 (Display)/ 导角插值 (Special curve) (End statement) (Parameter space vertices)。 表面属性 (Free-form curve)/ (surface attributes): (Curve or surface type): 表面主体陈述 (surface body statements): (Outer trimming loop) (Inner trimming loop) (Connectivity between free-form surfaces): Computer Knowledge and Technology 电脑知识与技术 第 7 卷第 10 期 (2011 年 4 月) 何连线组成线 面等等 用一个一个的多边形面片拼合就可以构造出三维物体 下面简要的介绍一个 文件格式[3]。 obj 文件不需要任何种文件头 尽管经常使用几行文件信息的注释作为文件的开头 (File Header), 注释行以符号 为开头 空格和空行可以随意加到文件中以增加文件的可读性 “#” , 开头 关键字可以说明这一行是什么样的数据 多行可以逻辑地连接在一起表示一行 。 OBJ 有字的行都由一两个标 方法是在每一 。 , 注意连接符 文件使用 后面不能出现空格或 (\) 在这个列表中 。 , 格 否则将导致文件出错 Tab , 。 关键字根据数据类型排列 每个关键字有一段简短描述 , 。 。 。 表示本行指定一个顶点 此前缀后跟着 个单精度浮点数 , 此前缀后跟着两个单精度浮点数 3 表示本行指定一个纹理坐标 表示本行指定一个法线向量 。 此前缀后跟着 分别表示该定点的 X、Y、Z 分别表示此纹理坐标的 。 个单精度浮点数 3 分别表示该法向量的 , X、Y、Z 。 。 坐标值 值 U、V 坐标值 。 。 。 (render attributes): (Bevel interpolation) 颜色插值 溶解插值 (Color interpolation) (Dissolve interpolation) (Level of detail) (Material name) 材质名称 材质库 (Material library) 投射阴影 (Shadow casting) 细节层次 Bevel: c_interp: d_interp: lod: usemtl: mtllib: shadow_obj: trace_obj: ctech: stech: OBJ 光线跟踪 曲线近似技术 表面近似技术 (Ray tracing) (Curve approximation technique) (Surface approximation technique) 文件不包含面的颜色定义信息 不过可以引用材质库 , 即材质库的意思[5]。 材质库中包含材质的漫射 等其它特征 透明度 (transparency) 3.2 OBJ 格式示例 材质库信息储存在一个后缀是 , ".mtl" 的独立文件中 关键字 。 "mtllib" (diffuse), 。 "usemtl" 环境 光泽 指定了材质之后 (ambient), 的 红绿蓝 的定义值 (specular) 以后的面都是使用这一材质 RGB( ) 以及反射 直到遇到下一个 , , , 折射 (specularity), "usemtl" (refraction), 来指定新的材质 。 举例说明 的文件格式 。 OBJ 先看一个四边形的 文件 OBJ square.obj。 2394 多媒体技术及其应用 本栏目责任编辑:唐一东
第 7 卷第 10 期 (2011 年 4 月) Computer Knowledge and Technology 电脑知识与技术 表示多边形 , ,f 最后一行表示一个有四个顶点的多边形 其顶点是顶点序号来表示的 表示注 。 # 。 的 数 据 解 释 如 下 命令或者文件结束为止 表 示 顶 点 法 向 量 表示平滑组 中间表示纹理向量序号 :vn 。 s 而 , 对应于由 ,g 是 1 表示顶点法向量序号 表 示 , vt group,all 是 的序号 的 名 字 group 。 在最后两行中 group all 。 命令定义的各行 1//1 。 2//2,3//3,4//4, face 1 , 第一个 中 含义一样[6]。 下 面 的 两 个 , 都 属 于 这 个 表示顶点序 为了在程序中读入模型 需要建立对应的模型数据结构 程序中首先定义了 文件对应的结构 OBJ 颜色列表结构体 材质描述结构体和总的模型描述结构体 主要代码如下 。 。 : , 、 释 。 又如 # square.obj v 0.000000 2.000000 0.000000 v 0.000000 0.000000 0.000000 v 2.000000 0.000000 0.000000 v 2.000000 2.000000 0.000000 f 1 2 3 4 其中 个 表示四个顶点坐标 4 v # twosquare.obj v 0.000000 2.000000 0.000000 v 0.000000 0.000000 0.000000 v 2.000000 0.000000 0.000000 v 2.000000 2.000000 0.000000 v 4.000000 0.000000 -1.255298 v 4.000000 2.000000 -1.255298 vn 0.000000 0.000000 1.000000 vn 0.000000 0.000000 1.000000 vn 0.276597 0.000000 0.960986 vn 0.276597 0.000000 0.960986 vn 0.531611 0.000000 0.846988 vn 0.531611 0.000000 0.846988 # 6 vertices # 6 normals g all s 1 f 1//1 2//2 3//3 4//4 f 4//4 3//3 5//5 6//6 # 2 elements 对 上 面 twosqaure.obj 直到下一个 g 后一个 group, 号 3.3 OBJ 文件的输入处理 1 , 了解了 如对象顶点的结构体 OBJ 文件的结构后 , 、 体 , 通用节点 // typedef struct _GLMnode { GLuint index; GLboolean averaged; struct _GLMnode* next; } GLMnode; // /* glmWeldVectors: eliminate (weld) vectors that are within an * epsilon of each other. * * vectors - array of GLfloat[3]'s to be welded * numvectors - number of GLfloat[3]'s in vectors * epsilon * */ GLfloat* glmWeldVectors(GLfloat* vectors, GLuint* numvectors, GLfloat epsilon) { GLfloat* copies; GLuint copied; GLuint i, j; copies = (GLfloat*)malloc(sizeof(GLfloat) * 3 * (*numvectors + 1)); memcpy(copies, vectors, (sizeof(GLfloat) * 3 * (*numvectors + 1))); copied = 1; - maximum difference between vectors 本栏目责任编辑:唐一东 多媒体技术及其应用 2395
Computer Knowledge and Technology 电脑知识与技术 第 7 卷第 10 期 (2011 年 4 月) /* pass this along for below */ for (i = 1; i <= *numvectors; i++) { for (j = 1; j <= copied; j++) { if (glmEqual(&vectors[3 * i], &copies[3 * j], epsilon)) { goto duplicate; } } /* must not be any duplicates -- add to the copies array */ copies[3 * copied + 0] = vectors[3 * i + 0]; copies[3 * copied + 1] = vectors[3 * i + 1]; copies[3 * copied + 2] = vectors[3 * i + 2]; j = copied; copied++; duplicate: /* set the first component of this vector to point at the correct index into the new copies array */ vectors[3 * i + 0] = (GLfloat)j; } *numvectors = copied-1; return copies; } /* glmFindGroup: Find a group in the model */ GLMgroup* glmFindGroup(GLMmodel* model, char* name) { GLMgroup* group; assert(model); group = model->groups; while(group) { if (! strcmp(name, group->name)) break; group = group->next; } return group; } 获取了全局变量后 图 文件的效果图 是读入一个 图 , 1 OBJ , 2 , 5 , , ( 就可以在视图类中绘制所得到的对象模型 然后对模型进行操作和交互式处理 。 是实现了三维模型与计算机程序交换 。 4 读入 OBJ 模型进行交互控制 首先需要在 windows 环境下安装 OpenGL glut 。 GLUT 将下载的压缩包解开 的步骤 下安装 的 库 不是 将得到 OpenGL 所必须的 , 在 但它会给我们的学习带来一定的方便 我的电脑 中搜索 并找到其所在文件夹 , 个文件 Windows 果是 压得到的 GLUT :1) 则应该是其安装目录下面的 。 2) “ 文件夹 VisualStudio2005, “VC\PlatformSDK\include\gl 和 放到静态函数库所在文件夹 如果是 glut.lib 把解压得到的 glut32.lib 和 glut.dll glut32.dll 4) 放到操作系统目录下面的 VisualStudio2005, 文件夹内 。 ( system32 为了验证前面定义的模型的可行性 我们开发了一个演示程序 结果成功地读取了由 ” “gl.h”, glut.h 把解压得到的 ”)。 则应该是其安装目录下面的 典型的位置为 放到这个文件夹 “VC\lib” :C:\Windows\System32)。 文件模式导出的 软件以 Maya OBJ Maya[7] 推荐安装 。 如 解 ( 。 3) 文件夹 )。 模型数据 并很容易地实现了模型纹理读取与映射 , 模型数据进入 中以后 利用 。 OpenGL OpenGL Maya , , 实现三维物体更加真实的显示 5 结束语 , 同时还可以实现三维物体的移动 提供的坐标变换 颜色处理 、 等交互[8]。 、 图 2 旋转 、 、 、 、 是移动的交互后的图像截图 。 光照处理 效果处理 选择及反馈模式等功能可 OpenGL 模型应用于 我们可以得到较真实的三维复杂物体模型 。 输出数据模型 引入 程序中 同时可以进行交互处理 Maya , OpenGL , 城市规划和虚拟现实等领域中 , , 中 OpenGL 降 低 了 复 杂 建 模 的 在实验系统中 , 得到较好的 成果可用于飞行运动模 当读取的模型 要利用有关图形加速显示 同时如何在读入的模型中加入属性信 当然 .OBJ 。 , , 如何比较快的显示模型 , 显示技术等 把 Maya 难度 , 我们在 三维动画效果 拟公路勘察 、 数据量很大时 技术 息 LOD 如 , , 难度比较大还有待于进一步研究 , 我们还可以编制 。 3DMAX, 等多种图形接口程序 把这些软件中建立的物体模型引入 AutoCAD 制作 、 游戏制作等领域 。 , 图 1 OBJ 导入图像 图 2 移动交互图像 OpenGL 的应用程序中 , 将可应用于虚拟现实 商业广告 影视 、 (下转第 2399 页) 、 2396 多媒体技术及其应用 本栏目责任编辑:唐一东
第 7 卷第 10 期 (2011 年 4 月) Computer Knowledge and Technology 电脑知识与技术 CCritSec RLock; CheckMediaTyep(); ReceiveMedia()// … } 处理接收到的视频并发向网络 ; 2.5 视频接收 SocketReceiveFilter , 负责接收数据包 并将数据包解包后按照媒体数据包的格式转发到下一级过滤器 在这里也是采用程序内过滤器的形式来实现的 了 类 , CSourceSueam , SocketReceiveFilter 类的父类选择了 建立的类分别是 CSource 。 SocketReceiveFilter 类 两个类的关键实现如下 类和 : , 属于客户端的源过滤器 。 的父类选择 类 因此 SocketReceivePin 。 Pin Class SocketReceiveFilter: Public CSource{ CCriSec RFilterLock; GetPin(); GetPinCount(); … } Class SocketReceivePin: Public CSourceStream { SocketReceiveFilter *RFilter; CMediaType RMedia; GetMediaType(); ProssBuffer(); SetMediaType(); … } 3 结束语 本文介绍了基于 完成了视频的捕获和编解码工作 的电信宽带时即可达到很清晰的效果 DirectShow , 。 的远程视频展示的实现方法 实现了本地视频捕获 回放和远程展示的功能 , 、 然后自行设计了网络传输部分的 实现流媒体功能 本系统利用现成的 视频捕获端和展示端都采 。 Filter 经测试 , 。 Filter 用 1M 参考文献: [1] [2] [3] [4] [5] [6] 视频展示台 王安 仲丽媛 张振 基于 曾华山 肖振中 陆其明 宋钰 梁晋 , . . DirectShow 基于 的 . . 基于 基于 , , .DirectShow P2P DirectShow DirectShow 开发指南 [EB/OL].http://baike.baidu.com/view/1916343.html. , DirectShow 孙加军 UDP 和 协议的网络视频监控系统 [J]. 计算机工程与设计 ,2010,31(12). 视频会议系统研究与设计 的 视频捕获的实现 的网络视频监测系统的设计与实现 [D]. [J]. 武汉 电脑知识与技术 VMR : 武汉理工大学 ,2009. ,2010,9(25):7110-7111. 计算机工程与应用 ,2006,42(12). [J]. 北京 : 清华大学出版社 ,2003. [M]. 梁辉 , , .OpenGL , 陈研涛 朱亚平 白建军 尚游 (上接第 2396 页) 参考文献: , [1] [2] [3] Shreiner D.OpenGL [4] [5] Angel E.OpenGL [6] [7] [8] 王景波 黄迁 李宏召 费广正 基于 乔林 陆玲 基于 基于 , , . . . .OpenGL 程序设计 程序设计指南 的 OpenGL 3D 和 OpenGL 的直升机 “ VisualC++ OpenGL 编程指南 等 图形程序设计指南 . OpenGL 三维图形设计与制作 北京 人民邮电出版社 ,1999. [M]. : 北京 水利水电出版社 [M]. : 北京 机械工业出版社 ,2006. 清华大学出版社 : 北京 . 清华大学出版社 ,2000. : ,2005. . 版 北京 版 [M].5 [M]. [M].2 ,2001. 果实造型研究 的红外目标景象仿真研究 地面共振 [J]. 三维动态仿真系统 开发研究与设计技术 红外技术 [J]. ,2010,36(4):279-280. ,2010,32(2):101-102. 电子测量技术 [J]. ,2010,33(1):1-2. : ” 本栏目责任编辑:唐一东 多媒体技术及其应用 2399
分享到:
收藏