基于X3D的网络虚拟汽车展示系统的设计
2013-08-15五邑大学计算机学院袁承武
五邑大学计算机学院 王 准 袁承武
1.前言
随着虚拟现实技术和互联网的发展,基于互联网的虚拟现实慢慢进入人们的视野。人们通过互联网,足不出户就可以游览逼真度很高的虚拟博物馆、虚拟城市等虚拟现实场景。
网络虚拟现实技术主要靠虚拟现实建模语言(Virtual Reality Modeling Language,VRML)来实现,VRML拓宽了虚拟现实技术的应用领域。面对越来越多的需求,VRML逐渐暴露出如不支持XML编码,交互性差等缺点。于是X3D[1](Extensible 3D)标准应运而生,X3D是VRML的继承和发展。
针对传统汽车导购网站以二维图片形式展示的弊端,本文利用新的X3D标准来设计的展示系统能够使浏览者仿佛置身于真实车展当中,充分体现虚拟现实的沉浸性、交互性。
2.X3D简介及开发环境
X3D整体结构[2]包括核心特性集、VRML97特性集、应用程序接口和扩展集四个部分。(1)核心特征集:定义了VRML97的54个节点中最为关键的23个节点,形成核心组件,并将其封装为一个小型的、可扩展的内核,运行时占用很少的系统资源;(2)VRML97特征集:将内核以外的VRML97节点设计为可拔插的组件,通过扩展内核,完整地实现了VRML97规范定义的功能,从而确保了X3D与已有的VRML应用兼容;(3)应用程序接口:X3D是描述几何体行为的一种文件格式,由于使用了XML编码,文档对象模型为X3D提供了一组应用程序接口,外部应用程序可以通过DOM访问X3D文件节点元素;(4)扩展集:在内核之上进行特性集扩展,用户可以添加其他的扩展或自定义新的硬件渲染技术,以实现复杂的功能。
整个系统的虚拟场景有许多的X3D文件组成,X3D文件结构[3]包含文件头、文件体及注释等内容,在主程序概貌中包括头文档、组件、说明以及场景等。在场景中利用基本几何节点、复杂节点、组节点、纹理节点、效果节点、组件节点、人性化节点以及动态感知节点等创建虚拟现实三维立体场景。
系统前台的三维呈现采用与浏览器完美兼容的BS Contact引擎,BS Contact引擎对X3D扩展节点提供了很好的支持。BS Contact为JavaScript提供了一个EAI(External Scripting interface)外部编程接口,这个接口允许外部程序JavaScript读取和改变X3D内部已被命名节点的任何域的值。
系统承载容器选用流行的Tomcat服务器,数据的处理将使用SQL Server 2005数据库。
3.系统设计与实现
3.1 系统架构
虚拟展示系统采用客户端层、中间件层及数据库层三层架构模式,客户端层负责接收用户点击事件及三维场景显示,中间件层根据不同请求将从数据库层获取的相应信息返回给客户端层。图1为系统的架构示意图。
3.2 数据采集及处理
需要采集的数据包括汽车三视图、汽车各项性能参数信息、场景及汽车零部件贴图。三视图用于汽车的建模参考,贴图则用于增加场景真实感,性能参数信息使用户了解汽车模型无法表现的性能信息。这些数据由JSP采集页面收集并传递给服务器的servlet,在servlet中通过JDBC代码将数据保存到数据库中。
系统提供车型查询功能,用户可以从数据库中查询出自己想了解的汽车产品的型号在客户端里面察看,同时也可以在展厅里同时查询出两种车型进行对比展示,使用户对两款汽车有更直观的认识和了解。
实现查询原理是当用户针对不同车型发起请求时,服务器负责查询的servlet将从数据库中获取相应的数据返回给客户端浏览器,相应JSP页面展现给用户所需信息。
3.3 汽车场景建模及建模工具
3D Studio Max,常简称为3ds Max或MAX,是Autodesk公司开发的基于PC系统的三维动画渲染和制作软件。广泛应用于广告、影视、工业设计、建筑设计、多媒体制作、游戏、辅助教学以及工程可视化等领域。系统场景由大量三维实体模型组成,主要有汽车、展厅及内部装饰、山地、小型城镇等,所以系统中汽车、展厅等复杂的物体采用强大的3DS MAX工具来建模。
模型需要转换为X3D格式的文件,由于3DS MAX对X3D不支持复杂材质的导出,所以导出的X3D模型文件需要使用X3D标准提供的材质节点进行处理,例如为模型增加贴图、光泽度、灯光等使场景更加逼真。模型建好之后使用X3D的Inline节点将其组合到场景中。X3D的另一个作用是在场景中添加对一些用户点击事件的处理节点、完成一些模型的移入和移出动作、对场景及模型进行细节的调整。图2、3为场景效果图。
3.4 X3D场景交互设计
本系统各种交互事件主要靠X3D的内部Script节点[4]来完成。
内部Script节点是一个特殊的可编程节点,它不能直接感应用户的操作,在三维空间中也不可见,但可以嵌套为模型节点的下级子节点并可与任意节点进行连接。当Script节点收到一个输入事件时,首先将事件值传到URL指定的文件中,通过这个脚本设置该Script节点输出事件的值。在编写用户自定义脚本和设定虚拟模型的传感事件时,Script节点的输入、输出域和其他感受器节点的输入、输出域的数据类型必须严格匹配[5]。
JSP页面脚本程序与场景交互的一般步骤是首先在脚本程序获取浏览器对象,通过浏览器对象加载场景;然后通过浏览器对象访问场景对象;其次由场景对象访问节点对象;最后由节点访问域对象,包括设置域值、监听事件等。
图4、5分别为交互原理图和内部Script节点交互测试用例,用户通过点击JSP页面控件来改变虚拟场景。例如,改变场景中物体的颜色、显示或隐藏物体、旋转物体等效果。
系统采用同样的原理来对虚拟展厅和虚拟试车场进行控制。例如改变展厅汽车的角度、改变漫游路线和视角等。
4.结束语
X3D标准作为新一代Web三维图形的标准,基于它制作的虚拟场景文件体积小,交互功能强大,且具有平台无关性,其发展前景广阔。本文构建的网络虚拟汽车展示系统除实现了基本的汽车展示功能外,还利用X3D的内部节点功能完成系统的交互功能。系统真实感还有待增强,是下一步需要完善的重点工作。
[1]ISO/IEC FDIS 19775-1.2:2008 Information technology-Computer graphics,image processing and environmental representation-Extensible 3D(X3D)-Part 1:Architecture and base components[S].2008.
[2]刘广涛,吴升.基于X3D的场景交互技术在虚拟生物博物馆中的应用.系统仿真学报,2008,20:348-351.
[3]Web3D Consortium.Introduction[EB/OL].(2007-12).http://www.web3d.org/x3d/specifications/ISO-IECFDIS-19775-1.2-X3D-Abstract-Specification/Part01/introduction.html.
[4]李海庆,殷国富,胡瑞飞.基于X3D的虚拟场景交互架构的实现方法研究[J].系统仿真学报,2006,18(2):383-385.
[5]黄正军,周建中.基于X3D的虚拟场景动态交互技术研究[J].计算机工程与科学,2007,29(7):55-57.