提高VRML语言在网络中的传输及浏览速度的算法研究

时间:2022-10-07 04:36:37

提高VRML语言在网络中的传输及浏览速度的算法研究

摘要:VRML技术可以建立网上的、三维的、可交互的虚拟场景。为了解决VRML场景越来越复杂,计算机网络设备更新换代缓慢,以至于影响到VRML的进一步发展的问题。该文从模型建立、数据压缩、算法等方面研究了几种优化方法。

关键词:虚拟现实;建模;算法;数据压缩

中图分类号:TP391文献标识码:A文章编号:1009-3044(2010)20-5618-03

Algorithm Research on VRML Language to Improve the Network Transmission and Browsing Speed

GUO Yao-tian, CHEN Ze-bin, WANG Jian-xin

(School of Information Science Technology, Hainan Normal University, Haikou 571158, China)

Abstract: VRML technology can create virtual environment online with three-dimensional and interactive. However, the VRML scenes are becoming increasingly complex, the computer network equipments are slowly update, so that seriously affected the further development of the VRML. In this paper, the new model, data compression, algorithms for several aspects of optimization are proposed.

Key words: virtual reality; modeling; algorithm; data compression

1概述

近年来虚拟现实技术越来越普及,人们已经不再满足于单纯的二维网页语言,很多国家和地区都在建立虚拟城市。许多城市规划、建筑设计产品展示和教育等诸多领域都在广泛的应用虚拟现实技术[2,8]。VRML作为HTML语言的扩展,是目前非常普及的虚拟现实技术桌面语言,在所有的WEB3D技术中,VRML是应用最为广泛的语言之一[1]。但是随着VRML中场景越来越大,模型越来越复杂,用户对画面质量的高要求,计算机硬件的更新换代所提高的性能提升远远不能满足日益庞大的数据处理需求。所以研究复杂的VRML场景的网络传输和实时浏览具有十分重要的意义。

调查分析国内外研究现状,目前比较多见的优化方案集中于以下几点:1)基于模型方面的优化;2)基于数据压缩方面的优化;3)基于算法方面的优化。但是仅仅应用其中一种方案或者使用方案的不恰当,往往难以有效的提高浏览速度,反而有可能会影响浏览的效果。

作者通过对 VRML节点的深入研究,和基于大量实验性设计方案的研究,从而得出了一些综合性的优化方案。可以有效的解决浏览速度慢的问题,提高了网络传输效率,有效地降低了虚拟场景的下载时间。

2具体优化方案

2.1 基于模型方面的优化

由于VRML与HTML语言有相似之处,原理上跟HTML语言一样可以使用任何一种文本编辑器进行编辑,如记事本和写字板。对于一些简单的球、面、直线等基本体尚可以用文本编辑器直接编辑,但是对于一些大的场景或者复杂的模型,需要编写几万行代码,简单的文本编辑器就显得捉襟见肘了。这是我们必须通过一些专门的三维建模工具进行建模(如3DSMAX,MAYA,AutoCAD等)然后将模型转换为VRML语言,选择专门的编辑器(如VrmlPad,CosmoWorld等)进行编辑。虽然一下三维建模工具可以帮助我们迅速直观的建立模型,但是通过模型所转换的VRML代码有很多数据冗杂,数据量大。对于网络传输和快速浏览有一定的限制。基于以上原因在保证模型质量的情况下必须对数据进行优化。

1) 减少非必要面来简化数据:因为三维模型是通过二维的面来组合形成的,所以在复杂的场景中,我们在保证模型真实感的前提下,我们可以尽量减少模型面的个数。这样何以提高虚拟场景的浏览流畅性。对于一些不是很主要的模型我们可以采用贴图的办法来替代复杂的建模,从而有效的减少面的个数[6]。

2) 建模时尽量使用基本造型节点:VRML提供了很多基本造型节点,如Box(长方体节点)、Cone(圆锥体节点)、Cylinder(圆柱体节点)、Sphere(球体节点)等[4]。下面我以3DSMAX中的VRML导出器为例,介绍同一个物体选择基本造型节点和不选择基本造型节点的数据量差异。我们在导出VRML语言是选择基本体(如图1),导出的一个圆球(如图2)。

选择导出“基本体”选项,导出后代码如下:

DEF Sphere01 Transform {

translation 16.63 0 -49.08

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 0.1059 0.6941 0.1059 } }

geometry Sphere { radius 42.28 } #此处代码表示球体的形状

} ] }

如果导出时未选择“基本体”,如下:

#VRML V2.0 utf8

DEF Sphere01 Transform {

translation 16.63 0 -49.08

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 0.1059 0.6941 0.1059 }}

geometry DEF Sphere01-FACES IndexedFaceSet { #此处代码表示球体的形状

ccw TRUE solid TRUE#此处代码表示球体的形状

coord DEF Sphere01-COORD Coordinate { point #此处代码表示球体的形状-7.621 41.47 -3.157, -8.09 41.47 -1.609, -8.249 41.47 0, #此处代码表示球体的形状

……… #此处代码表示球体的形状481, 479, 478, -1, 481, 480, 479, -1, 481, 449, 480, -1] #此处代码表示球体的形状

} } ]}

我们可看到表示同样的一个物体时,使用基本节点(球节点Sphere),文件很小,仅386 B,其关键部分表示物体形状的代码仅有一行;如果不是用基本节点,则VRML需要用IndexedFaceSet节点创建空间面几何造型,而IndexedFaceSet需要列出虚拟空间中所有面的点和边界,数据量很大,文件就变成了32.6KB,其关键部分表示物体形状的代码多达数百行。

2.2 基于数据压缩方面的优化

VRML时文本语言,因此有较大的压缩空间,利用优化和压缩工具可以减少非必要面片数,删除场景中的不可见的面,适当的减少数据精度来优化原始模型。VRML编辑器中的功能可以讲数据压缩到原先的10%-30%。

2.3 基于算法方面的优化

1) 使用原型和重复引用。

VRML语言中提供了灵活的自定义原型方式,通过自定义圆形的方式对标准节点进行组合,构建复杂场景,在构建复杂场景过程中,有时候会出现许多重复的造型,这是我们可以用DEF 和USE 对代码进行优化。首先将重复出现的物体的第一个模型用DEF进行命名,在其后面出现的造型相同的物体,就可以使用USE引用。通过translation、rotation和scale等域的使用控制新引用物体的位置、方向和大小[3]。

如下的简单代码可以看到具体的使用方法。

Transform{

children [DEF TREE Transform{ #DEF定义新节点TREE(树)

translation 50 15 10

children [Shape{

geometry Cone{

}}]}]}

……

Transform{

children [USE TREE ]#引用desk

translation 100 15 10 #平移引用对象

scale 0.5 0.5 0.5 }#缩放引用对象

以上代码执行的结果是虚拟场景中出现了两棵树,其中第二棵大小是第一个的一半,并且第二棵树的距离也仅仅在X轴上平移了50个单位。

2) 调用外部文件:

对于大型复杂的虚拟场景,可以先将较大的虚拟场景分成几个部分,分别有不同显示精细程度,然后再用Inline节点将这些文件集合到一个文件中,再配合LOD(细节层次控制)可以显著提高下载和浏览的速度[6],代码如下:

#VRML V2.0 utf8

LOD{

center 0 0 0#中心的三维坐标

range[10 20 30] #距离远近的列表

level[Inline{url "first.wrl"},#调用文件

Inline{url "second.wrl"},

Inline{url "third.wrl"}

] }

其中LOD节点有三个域,分别为center、range和level。其中range域是用来说明与空间造型的距离的列表。根据距离列表,浏览器会从一个细节切换文件到另一个细节文件。在上面的代码中,如果与造型的空间距离小于10,浏览器调入第一个文件(first.wrl),如果距离在10和20之间,则调入第二个文件(second.wrl),距离在20和30之间调入第三个文件(third.wrl)。first、second、third三个文件中,精细程度依次,这样当物体离观察者较远的时候调用精细度差的third.wrl;当观察者走进物体时择依次显示精细度较高的second.wrl 和first.wrl,这样就可以节约资源提高浏览速度[5]。

3) 基于JAVA的快速浏览算法:

尽管以上很多优化方案,但是对于大场景的浏览,浏览速度还是受限制。当浏览大场景时,所有场景都预存在缓存中,这样浪费了大量的内存资源,对于一些电脑配置不是很高的用户,画面就会不流畅。

ProximitySensor和VisibilitySensor触发器是一个范围控制开关。通过这类触发器我们可以判断观察者的位置与物体的距离,在于JAVA相结合时在据观察者一定范围内的物体显示出来,不再这个范围内的场景就不要显示。这样可以保持浏览器内的场景始终保持一定的数量,减少浏览器的负担,提高浏览速度[7]。

3 结论

本文关于如何提高在VRML语言在网络的传输和浏览速度做了研究,综合了多种优化方案,取得了初步成果,但是为了充分利用VRML97规范,构建逼真的三维虚拟场景,还有许多工作需进一步研究。如浏览虚拟现实时用户电脑内存的释放,物体模型的简化算法等。

参考文献:

[1] 张武军,田海,尹旭日.VRML虚拟现实技术基础与实践教程[M].北京:冶金工业出版社,2008.

[2] 杜来红,房亚东,彭国勋.基于特征的三维建模技术的应用[J].机械学报,2002,9(1):34-39.

[3] 汪兴谦.循序渐进学VRML[M].北京:中国水利水电出版社,2002.

[4] 曾建超,俞志和.虚拟现实技术及其应用[M].北京:清华大学出版社,1996.

[5] 王斌.基于VRML的虚拟场景优化技术[J].和田师范专科学校学报:汉文综合版,2007(6):198-199.

[6] 王汝传,辛晨昀,张登银,等.基于VRML的三维几何体建模算法研究[J].通信学报,2003,24(7):74-78.

[7] 王森,王萍,王昱颖,等.大规模VRML虚拟场景的快速浏览算法[J].系统仿真学报,2006(18):8170-172.

[8] 何书前,桂占吉,高慧鸿.多用户网络虚拟校园漫游系统的构建与研究[J].现代计算机,2009(2):17-19.

上一篇:基于Authorware登录系统的设计与开发 下一篇:基于AT89C51单片机的电子琴设计