您好,欢迎来到年旅网。
搜索
您的当前位置:首页OpenGL技术在虚拟现实三维重建中的应用

OpenGL技术在虚拟现实三维重建中的应用

来源:年旅网
维普资讯 http://www.cqvip.com

第29卷VO1.29 第18期 NO.1 8 计算机工程与设计 Computer Engineering and Design 2008年9月 Sept.2008 OpenGL技术在虚拟现实三维重建中的应用 张晓, 刘培玉 (山东师范大学信息科学与工程学院,山东济南250014) 摘要:目前,利用专业三维建模软件很难实现虚拟现实所需要的交互性,同时,在OpenGL建立的虚拟现实环境中,也很难 通过编程进行复杂的三维建模。因此通过研究比较现在常用的利用OpenGL创建3D模型的方法,提出了一种新方法,即利 用3DSMax进行复杂建模,并将模型导出为3DS格式,然后通过在OpenGL下编程控制模型来达到对虚拟现实环境的仿真。 最后,利用该方法成功模拟了一个交通事故现场的虚拟环境,并可以对环境中的车辆等事物进行编程控制。 关键词:虚拟现实;三维重建;三维模拟;系统交互;交通事故 中图法分类号:TP311.12 文献标识码:A 文章编号:1000—7024(2008)l8-4875—02 Application OpenGL in 3 D reconstruction of virtual reality ZHANG Xiao.LIU Pei—yu (School of Information Science and Engineering,Shandong Normal University,Jinan 25001 4,China) Abstract:Now professional 3D modeling sot'cwares can’t meet the requirement of interactivity of a VR system,meanwhile,in the graphic developing environment based on OpenGL,it is dificultf to create complicate 3D models by encoding.Therefore,a new method is put forward,that is,to create complicated models by using 3DSMax,the model ilfes exposed to 3DS-format and fetched in OpenGL in which real—time rendering effects is attainable.At last this method is used in a virtual reality system of a trafic accifdent scene success— fully,and the vehicles are controlled by encoding. Key words:virtual reality;3D reconstruction;3D simulation;system interactive;trafic accidentf 0引 言 虚拟现实技术(VR)起源于美事部门的战场模型系 这种方法的在普通电脑上也需要极高的软硬件代价,所以效 果也不是很理想。 通过研究发现,以上3种模式都有不同的缺憾,因此我们 提出了一种新的创建和拾取3D模型的方法,以便在虚拟现实 环境中能有较高的真实感,即利用3DSMax软件创建复杂的 场景模型然后再利用OpenGL进行编程控制。 统,主要是利用计算机来实现虚拟的艺术环境。我们通过计 算机来创建环境中的立体模型,并利用编码把它们转化成和 我们现实中一一样的可以感知的实物,这样就创建了一种沉浸 式交互环境,用户可以直接的观察,控制,接触和改变内部环 境。虚拟现实技术不同于传统的三维动画和CAD模型创建, 而是一个开放的互动环境。具体的说,虚拟现实有3大特点: 浸沉感、交互性和构想性。 1 OpenGL及其3D建模 OpenGL是近几年发展起来的一个性能卓越的三维图形 标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以 SGI的GL三维图形库为基础制定的一个通用共享的开放式 三维图形标准。OpenGL实际上是一一个开放的三维图形软件 包,它于窗口系统和操作系统,以它为基础开发的应用程 序可以十分方便地在各种平台间移植;OpenGL可以与Visual c++紧密接口,便于实现机械手的有关计算和图形算法,可保 VR的核心技术主要是动态环境的模型创建技术。目前 有3种方法在虚拟现实环境中创建三维模型:①借助高级图 形库(例如OpenGL),利用了OpenGL可以便捷的改变现场的 颜色,灯光,位置的优点。但是在创建较复杂的模型上比较困 难,因为OpenGL只提供了较简单的几何模型” 。②通过VRML 建模。VRML可以快捷的在网络上发布,编程也比较简单。但 是当场景比较复杂的时候,程序的运行速度比较慢,因此在个 人电脑上很难展示 较好的效果。⑨利用专业的建好的效果, 收稿日期: 2007-09—26 E—mail:zxalicejue@163.com 基金项目: 山东省科技攻关基金项目(2006GG2201031)。 证算法的正确性和可靠性;OpenGL使用简便,效率高 。 OpenGL虽然可以进行图形的绘制、移动、旋转等操作,但 是在物体造型方面,并没有提供三维模型的高级命令,只能以 作者简介: 张晓(1983--),LU东烟台人,女,硕士,研究方向为虚拟现实、三维重建; 刘培玉(1960--),男,教授,博士生导师,研究方向为 虚拟现实、 网络信息安全。 4875-—— ——维普资讯 http://www.cqvip.com

顶点为图元,由点构成线,由线及其拓扑结构构成多边形,然 后由点、线、面组成想要绘制的形体。这种造型模式比较灵 数据的读取。读取的方式是从模型文件中读取一个块,根据 块ID来判断块的功能信息,然后根据块ID进行相应的处理。 在块处理过程中,比如主编辑块,也是通过相同的方式,读取 活,对简单、规则的形体尚可适用,但对复杂、不规则形体工作 量极大且复杂,并且当我们需要得到较好的视觉演示效果的 时候,很容易出错0 。为了解决这个问题,我们在程序中使用 3DMax绘制3DS格式的模型,再将它导入到我们的vC++程 序中,利用OpenGL函数库,来对这些模型进行控制,例如旋 转、移动等。这样,我们既可以直观、方便的进行场景的建模, 又可以通过编程对模型进行控制。 目前,基于OpenGL的模型创建主要是通过简单几何模 块的组合,NURBS建模和3DMax建模来实现。由于前两种 方法表现欠佳,所以最后一种方法目前使用最广。因此我们 利用3DMax建模,并将它转换为OpenGL可以理解并控制的 3ds文件。 3DMax是目前最流行的三维建模和动画制作软件,它的 可视化编辑环境可以很方便的修改模型。利用3DMax我们 可以创建出很复杂的模型,例如飞机、汽车等,而且我们还可 以很方便的修改它的材质信息,来达到不同的演示效果。创 建完模型后,我们可以把它导入为3DS格式,然后加入到我们 利用OpenGL创建的场景中去。 2在OpenGL中导入3ds文件 3ds文件是基于“块”存储的,这些块描述了诸如场景数 据,每个视点的状态、材质、网格数据等信息。每个块都包含 一个ID和下一个块的偏移量。由于Autodesk公司并没有发 布关于3ds文件格式的官方文档,所以无法确定所有块的功 能。但是,根据这种块结构,尽管不理解某个块的功能,或者 对当前的块并不感兴趣,也可以很容易的跳过它,处理下一个 块。同时,跟许多文件格式类似,为了读取方便,3ds文件中的 数据的存储方式是Intel式的,也就是说是高位放在后面,低位 放在前面。 在3ds文件中,三维模型是基于块的层次结构进行存储 的 。每个块用ID来标识其功能含义,用长度来标识本块 大小,即下一块的起始位置的偏移字节数因此设计数据结 构如下: Struct tChunk{ unsigned short int ID;//块的ID nusigned int length;//块的长度 nusinged int bytesread;//需要读的块数据的字节数 ) 块ID是用来标识块功能含义的,在程序中将块ID定义 成宏,便于程序的理解和编写,也有利于提高程序的可读性。 几个主要的块ID宏定义如下: #defnie MAIN3DS 0x4D4D//主块 #define EDIT3DS 0x3D3D//主编辑块 #define EDIT MATERIAL 0xAFFF//材质块 #defnie EDIT OBJECT 0x4000//物体块 #define OBJ TRIMESH 0x4100//网格块 由于3ds文件里采用的是块结构的组织方式,并且是块 与块之间存在嵌套的关系,所以我们对3ds文件中的三维模型 -——4876・—— 一个子块,判断块信息,再进行相应的数据提取和存放处理。 主要的读取过程的流程图如图1所示。 图1 3DS文件处理流程 其中面信息和材质信息的数据结构设计为如下。面结 构体: struct tFace{ int vertlndex[3];//顶点索引 int coordlndex[3];//纹理坐标索引 }; 材质信息结构体: struct tMateriallnfo{ char strName[255];//纹理名称 char strFile[255];//纹理文件名称 lfoat color[3];//对象的RGB颜色 int texureId;//纹理ID lfoatuTile;//u重复 lfoatvTile;//v重复 lfoatuOffset;//u纹理偏移 lfoatvOffset;//v纹理偏移 }; 再现三维模型时,遍历模型中的所有物体对象,每个物体 对象都是通过三角形的面信息构成的,而且三角形的面信息 中保留了物体的材质信息,比如纹理坐标、颜色等,因此通过 再现所有的物体的所有的三角形面,就可以在OpenGL的三维 空间中再现出三维模型,然后利用OpenGL中的函数库,对模 型进行一系列的移动旋转等操作 。在OpenGL程序中,我们 还需要加入导入3DS文件的代码如下: Bool Cload3DS::Import3DS(t3DModel pModel,char StrFi— leName); { char strMessage[255]={O};//打开文件 m FilePinter=fopen(strFileName,"rb”);//确保正确的指向 文件 if(1 MFilePionter) (下转第4880页) 维普资讯 http://www.cqvip.com [h,P,ksstat]=kstest2((SumAl】A,Sum_AlLB,0.O5));%Ko・ 朱伟民.实用试卷成绩统计分析【J].中国教育技术装备,2006, (5):13.15. lmogorov—Smimov检验 5结束语 本文给出一种基于DDE协议实现Excel与Matlab中的数 金敏.如何进行考试成绩的统计分析[J】.桂林航天工业高等专 科学校学报,2005,39(3):40-42. 梁庚,白焰,李文.基于Windows DDE的客户/服务器应用开发 [J].计算机工程与设计,2004,25(5):736.739. 据共享,进而完成试卷深度分析的设计思想及应用实例,反映 借助Matlab强大的数算处理功能,可大大降低教学管理 人员的工作强度,为改进考试管理工作,提高命题质量,最终 实现教学管理的科学化与规范化提供了一种方便的途径。 徐江华,孙荣,邵惠鹤.基于组态王、Excel和Matlab的PID自 整定仿真软件[J].计算机工程,2003,29(3):27.29. 伯晓晨,李涛,刘路,等.Matlab工具箱应用指南一信息工程篇 [M].北京:电子工业出版社,2000. 陈桂明,戚红雨,潘伟,等.应用Matlab数理统计(6.x)【M].北京: 科学出版社,2002. 参考文献: [1】 金玉章.实用教育统计与测量[M】.北京:教育科学出版社,1998. (上接第4876页) { sprintf(strMessage,"Unable to ifnd the ifle:%s!”,str FileName); ; MesssageBox(NULL,strMessage,"Error",MBOK)return false; ) //读入第一块代码,并判断是否为3ds格式 ReadChunk(m CurrentChunk); ,/确保读入的是3ds文件 { sprintfstrMessage,"Unable to load PRIMARY chunk from __ 图2 事故发生前俯视图 图3 事故发生时侧视图 所降低,因此本系统对设备的硬件配置要求较高。 4结束语 为了解决虚拟现实环境中的三维环境创建和交互问题, 本文提出了一种新的场景创建方法,即先利用3Dmax创建模 型,再利用OpenGL进行编程,充分结合了二者的优点,达到 了较好的实验效果,可以实现精确的仿真和互动。同时,由于 ifle:%!”,strFileName); MesssageBox(NULL,strMessage,"Error",MB一0K); ); //提取数据,ProcessNextChunk0是一段循环 这些操作没有改变3DS文件格式,因此这些技术具有很强的 通用性,可以集成到其它多种软件平台上进行使用。 ∥利用下面的这段循环,来创建物体 ProcessNextChunk(pModel,mCurrentChunk); —//读入整个3ds文件后,计算顶点法向量 ComputeNormals(pMode1); 参考文献: 【1] 赫恩.计算机图形学[M】.北京:电子工业出版社,2005. [2] 高青风,程国全.OpenGL三维高精度仿真时空矛盾环节方法 [JJ.工程图学学报,2007(3):57.60. 【3] Company P,Contero M,Conesac J,et a1.An optimization based reconstruction engine for 3D modeling by sketching[J].Compu— ters and Graphics,2004,28(6):955.979. ,/释放内存 CleanUp(); retulIl true; ) 3软件开发 利用本文中介绍的方法,我们开发了一套模拟交通事故 【4] 尹士伟,张光年,郭新宇.一种控制3ds模型的新方法的研究与 实现[J1.微计算机信息,2007,23(3):307—308. [5] 殷素峰.在OpenGL环境下开发3ds文件浏览器[J].工程图学 学报,2005(6):22—25. 现场的虚拟现实系统。我们利用3DMax构建车辆和道路的 模型,并导出为3ds格式,然后在VC十+中编程读取该文件,从 而实现出了如上图所示的较真实的场景。在程序中,我们利 用了动画的原理,通过变化每一帧中车辆的位置,实现了车辆 的运动” 。图2、图3模拟了一次交通追尾的事故图片,并通过 视角表换提供了不同角度的视图模式 。本系统可以用来直 观的演示与理解事故现场的车辆运行情况,从而帮助工作人 员验证事故分析的结果。通过实验我们也发现,当调入的3D 模型更复杂、精确时,占用系统资源也将增加,运行速度也有 ・——【6] 杜霄,唐涛.三维视景仿真中动态模型的建立[J】.微计算机信息, 2006(1):248—250. [7】 和平鸽工作室.OPENGL三维图形系统开发与实用技术[M]. 北京:清华大学出版社,重庆大学出版社,2003. [8] Jin H,Soaao S,Yezzi A J.Multi.view stereo reconstructi0n of dense shape and complex appearance[J].Compute Vision,2005, 63(3):175.189. 4880・—— 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务