APP下载

虚拟现实二次开发平台的研究与实现

2010-06-29

成都信息工程大学学报 2010年2期
关键词:二次开发代码虚拟现实

王 柯

(成都信息工程学院软件工程学院,四川成都610225)

1 引言

随着计算机图形学的发展,虚拟现实技术得到了广泛的应用[1]。虚拟现实技术是一种可以创建和体验虚拟世界的计算机系统[2],被广泛应用于军事、医疗、航空、汽车、机械等多个领域。它是计算机图形学、多媒体技术、人工智能技术等高科技技术的高度集成和融合,其本质是客观事物在计算机上的一种仿真实现[3]。

目前,三维虚拟场景的创建和显示有3类比较流行开发方式,一类是在商用可视化开发平台(如3dsmax、maya等)下进行虚拟模型的可视化建立与编辑,再通过安置静态或动态摄像机实现对三维场景的观察。这种场景建立方式虽然非常方便,模型的外观和参数都可通过直观的方式修改和调整,但在最终的虚拟场景中用户往往只能按照预先设置的摄像机视点观察场景,被动地接受场景的变换和更替。难以实现与虚拟场景内模型对象的实时交互,更无法达到通过交互改变虚拟场景的目标。而大多数交互实时性虚拟现实系统多采用在开发平台中以编程语言调用图形应用程序接口的方式实现特定的虚拟场景,其开发成果物对于实时和交互能提供良好的支持。但如果用户对于虚拟场景的显示要求有所变化,程序员往往需要对源代码进行修改以满足用户的特定要求,其编码工作的重复率较高,复用率极低。虽然目前也陆续有一些支持编程的可视化三维软件平台,可以以直观的方式创建简单的三维场景,但其开发的结果大多需要依赖原始的开发平台做支持,制约了其开发成果的通用性。因此,针对虚拟现实场景的建立工作,开发一套既能满足可视化直观的可复用三维模型建立方式,又保证虚拟场景的交互实时性的通用二次开发平台就显得非常重要。

2 虚拟现实二次开发平台的设计

2.1 虚拟现实二次开发平台的质量标准

为满足虚拟现实二次开发平台两类典型用户的使用需求,即一方面能为专业三维程序员提供直观便捷的可复用三维场景建立环境,另一方面又能降低三维系统设计的难度,为普通工程人员提供开发交互实时三维场景系统的可能性,在设计二次开发平台的过程中需要从方便易用、技术先进、执行高效、高稳定、可移植兼容、高效伸缩和系统融合以及相对独立等多个方面来衡量平台的品质[4]。其中平台的易用性是设计时所考虑的首要因素,二次开发平台的使用方式尽量符合开发人员的工程习惯,界面设计直观易于用户理解;另一方面,随着三维图形设计技术的发展,推出新的模型实现算法或对原有的绘制方法进行改进以后,对用户之前所开发的应用程序应该保持较好的向下兼容性,因此系统使用组件式开发将是解决兼容与移植的可行方案;由于虚拟现实二次开发平台涉及最多的是三维图形的处理和渲染,有效提升平台处理和渲染的速度是平台设计人员和普通用户都非常关注的问题,因此在设计过程中应用先进的算法和软件技术提高系统的执行速度也显得非常重要。

2.2 虚拟现实二次开发平台的开发模式

在二次平台的开发过程中,根据二次开发技术的不同可分为两种模式:内嵌机制和外部开发机制[4]。虚拟现实二次开发平台采用了外部开发机制进行开发,外部开发机式具有非常强大的功能,几乎可以实现宿主程序提供的所有功能,并具有较强的独立性,还可生成新的应用程序,拥有自己的界面和功能,它的执行不影响宿主程序的运行。另外,外部开发机制还可以将开发成果作为插件形式在宿主程序中调用,增加宿主程序的功能模块,这一开发模式就相当于一次软件创新,但是亦有其不足,它要求二次开发人员具有较高的素质,对宿主程序有相当地了解,且对宿主程序的要求较高[4]。虚拟现实二次开发平台的开发模式示意图如图1所示。

2.3 虚拟现实二次开发平台的模块划分

在设计过程中,将虚拟现实二次开发平台划分为5大功能模块,分别是:基本三维模型处理模块、扩充三维模型处理模块、三维场景管理模块、界面管理模块、代码处理模块。为保证二次平台的可移植性与兼容性,所有模块都以组件的形式加以实现。

虚拟现实二次开发平台的模块划分如图2所示。

(1)基本三维模型处理模块负责处理二次开发平台中简单三维模型的建立和修改工作,简单三维模型主要支持经典几何图元类别,具体包括点、线、多边形、长方体、球体、圆柱、圆锥、圆环以及茶壶等模型。

(2)扩充三维模型处理模块负责处理二次开发平台中多种复杂三维模型的建立与修改工作,目前已经实现的扩充三维模型包括能从外部导入的3ds模型、简单粒子系统、起伏地形以及动态火焰模型,后续将对该类模型进行扩充,以实现更多非规则模型的绘制。

(3)三维场景管理模块负责处理三维场景中光照变换、材质设定、虚拟摄像机控制的管理和参数变换。

(4)界面管理模块用于控制虚拟现实二次开发平台的界面布局、负责捕捉和传递控件事件。

(5)代码处理模块是虚拟现实二次开发平台的关键部分,负责处理控件事件,向后台源代码区插入用户通过可视化界面操作的结果,并负责将可视化编辑的结果保存为文件。

3 虚拟现实二次开发平台的实现

图1 虚拟现实二次开发平台的开发模式示意图

图2 虚拟现实二次开发平台的模块划分

3.1 开发工具的选择

虚拟现实二次开发平台采用VC++.net和OpenGL进行开发。C++是一种基于标准的互操作语言,开发人员通过VC++.net,可以享用到最优秀的C++开发工具,VC++.net也为开发人员提供了大量的专业级功能,方便为Windows环境创建性能优越的应用程序和组件;开放图形库OpenGL是SGI公司所发布的一套三维的计算机图形和模型库,它集成了诸如坐标变换、光照设置、材质和纹理编辑、像素操作、融合、反走样和雾化等复杂三维图形操作命令,以其优良的性能成为了三维图形软件接口的工业标准,被广泛应用于虚拟现实和计算机可视化仿真领域[5,6]。

3.2 关键技术

(1)基本三维模型处理

现实世界中存在很多三维物体可以由基本三维图元组装而成,基于上述考虑,在基本三维模型处理模块中将图元的共性加以提炼,定义为父类3DPModel,而由父类所派生的模型组件,封装为子类。

在具体定义时,父类中仅抽象出最基本的成员变量,分别是模型名称ModelName、模型顶点列表Model-PointList、模型纹理坐标ModelTexCoor、模型位置变换参数集ModelPositionSet以及模型颜色控制参数ModelColor;在成员函数部分,则仅定义出最基本的模型绘制函数ModelDraw()、模型颜色设置函数ModelColorSet()、模型顶点设置函数ModelPointsSet()、模型纹理坐标设置函数ModelTexCoorSet()以及模型变换函数ModelMove()、ModelRotate和ModelScale(),为功能上处理方便,初期并没有将材质的定义放入模型类中,而是放入三维场景管理模块中做单独处理。

各图元子类从父类继承,以多态性实现自己的功能,较为简单的图元对象,诸如点、线、多边形和长方体模型,在其绘制函数中预先已写入几何图元的定义值,而稍复杂的图元对象,诸如球体、圆柱、圆锥、圆环以及茶壶等模型,为减少编程的难度,则采用直接调用辅助库函数进行绘制。

(2)3ds模型的处理

在模拟真实世界的三维场景中,除了部分可以由基本图元组装而成的模型外,还有更多外形各异、组成复杂的模型外观,比较典型的如汽车、楼房和绿化带等,这类模型如果直接使用基本图元建模函数组合生成,建模的工作量极大,且难于获得最理想的模拟效果,因此系统中的这类复杂模型便利用目前比较成熟的三维设计类软件,采用真实对象的外观参数进行可视化建模,建模完成后再将三维模型的外观控制信息读取到系统中交由OpenGL进行转换和控制,该部分处理工作将其归入扩充三维模型处理模块中进行。

为保证平台处理的便利性,预先建立了一些通用模型,初期共分为3类,分别是汽车类GLCar、楼房类GLBuildering和绿化类GLGreen,将事先建立好的模型转换为3ds文件,3ds格式的文件是由很多块所构成,块是3ds文件的基本单位,块是可以互相嵌套的,通过文件中大量的块以及块的相互嵌套构成了一个复杂但又灵活的文件系统[7],在代码中通过分析3ds文件的结构获取绘制关注的顶点信息、面索引信息和纹理坐标信息等。除了可以直接使用系统所预先建立好的3类模型外,在实现过程中也考虑到模型的多样性与用户的特殊需求,实现时将读取3ds文件的代码进行了封装,以便用户可以在平台内导入自己所建立的外部模型以构成虚拟场景。

(3)代码处理

在设计时,为方便虚拟现实二次开发平台进行后续代码的处理工作,事先创建完成了三维代码的基本框架。基本框架主要用于实现三维绘图前的准备,主要包括引用Windows环境和OpenGL库所对应的各头文件、设置像素格式、初始化OpenGL绘图环境、定制时钟、创建绘图窗口以及定义基本窗口事件处理机制等内容。

平台运行中,代码的植入由用户事件所驱动,在基本框架内按照程序结构进行了植入区位置的预分配,设置了代码植入区域的识别符,系统通过读取识别符以确定代码的植入位置。

为方便程序读取,使用VC++的注释格式,比如植入与三维环境中光照相关代码的区域,其首行识别符为/*light*/;植入三维模型材质相关代码的区域,其首行识别符为/*material*/。比如当用户打开光源设置面板,启用光源并设置该光源的各项参数后,系统将自动植入该光源所对应的源代码,为避免用户输入错误,在系统中对各输入框的输入值范围进行了限定,并规定如果用户输入“#”字符,则表示不启用该项参数值,如图3所示。

图3 光照源代码的生成

3.3 应用实例

虚拟现实二次开发平台在VC++.net开发环境下,通过调用OpenGL三维图形库进行二次开发而成。较为完整地处理了三维绘图环境下的相关技术,包括绘制环境的预处理工作;标准三维图元的绘制以及复杂三维模型的导入与生成;简单粒子系统、三维地形、动态火焰等非规则模型的模拟;最为关键的是,通过事件驱动的代码置入方式,为平台用户提供了直观可视化的三维应用程序开发方式,通过在平台内设置三维场景的相关参数,快速生成三维场景源代码。

用户通过点击菜单栏下方建模工具栏中的各建模工具按钮,可以快速创建简单几何图元,其创建效果如图4所示;图5为导入外部3ds模型后的场景,用户可以方便地通过摄像机设置面板修改视点的位置和方向;除了以参数方式设定摄像机视点外,用户也可以通过键盘上的方向键与拖动鼠标,实现场景的漫游工作,图6是视点漫游过程中观察某室外场景的示意,在该场景中使用了系统的预置绿化类模型建立了一些树木外观。

在平台界面左侧下方的新代码植入显示窗口内,会实时显示之前操作确认后所植入的新代码,用户可以检查代码的植入情况,如有不正确之处,也可以手工修正。当所有对三维场景的修改工作完成后,即可将植入代码后的绘制程序进行存储,如图7所示。

图4 基本图元绘制

图5 设置摄像机参数

图6 视点漫游过程中所观察到的室外场景效果

图7 存储绘制代码

4 结束语

对建立一套可视化桌面虚拟现实二次开发平台进行了阐述。平台较为完整地处理了三维图像的绘制工作,包括经典几何图元以及外部3ds模型等非规则三维景观的建立、视点转换、光照设置等功能。与目前流行的三维场景系统开发方法相比,虚拟现实二次开发平台通过前台可视化操作触发后台代码植入的方式,实现了对三维基本框架的丰富与扩充,为平台用户进行三维视景源代码的编写提供了直观便捷的操作方式,一方面减低了进行三维可视化代码编制的难度,另一方面则较大地提高了开发高品质三维软件的效率。

[1]邓宇,陈孝威.基于Visual C#.NET与3DSTATE实现虚拟现实[J].计算机工程与设计,2006,27(21):4019-4021.

[2]檀鹏,张树扬.虚拟现实开发平台系统的研究与实现[J].徐州师范大学学报,2005,23(2):57-59.

[3]徐延海,宁凡坤.用于汽车操纵稳定性模拟的虚拟现实平台的研究[J].系统仿真学报,2007,19(17):3984-3987.

[4]赵卫东,柳先辉,卫刚.CAD软件二次开发平台实现技术[J].计算机辅助设计与图形学学报.2003,15(4):512-516.

[5]贺孝梅,刘丹青,姚新港.基于OpenGL的小球碰撞动画模拟的实现[J].计算机应用与软件,2007,24(6):184-186.

[6]魏海涛,姜昱明,张娅.基于OpenGL的虚拟航天飞机发射场景仿真研究[J].微电子学与计算机,2009,26(5):200-203,208.

[7]李胜睿,王乘恩,王智高.计算机图形学实验教材[M].北京:机械工业出版社,2004:173-175.

猜你喜欢

二次开发代码虚拟现实
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
创世代码
创世代码
创世代码
创世代码
西门子Easy Screen对倒棱机床界面二次开发
风口上的虚拟现实
虚拟现实技术向科幻小说借灵感
HTC斥资千万美元入股虚拟现实设备商WEVR