基于VRML的虚拟场景的设计与实现

  • 格式:pdf
  • 大小:149.56 KB
  • 文档页数:3

基于VRML的虚拟场景的设计与实现 

陈华陈福民 

(同济大学计算中 ,上海200092) 

E—inall:hualluachen@21cn.eom 

摘要文章结合VRML的功能,具体分析了基于VRML的三雏交互式虚拟场蒂设计的关键技术,并以虚拟演播室系 

统为应用背景,培出了用VRML开发三堆交互式虚拟场景的整体解决方案 

关键词VRMI 事件EAI虚拟演樯室 

文章编号100 8331(2002)06-0127—03 文献标识码A 中国分类号TP302 

The Design and Implementation of VRnL-Based Virtual Scene 

Chen Hua Chen Fumin 

(Computer Center of Ton ̄i University,Shanghai 200092) 

Abstract;In this paper,combined wl山the function of VRML.the key technology of developing VRML—Ba..ed 3D in— 

te-Fdetlve scene is analyzed in detail Furthermore,hased on the apphcation in Visual Stuclio Sys ̄m,a whole resolution of 

developing 3D intemehve virtual scene by VRML is presented 

Keywords:VRM1 .Event,EAI,Virtual Studio 

l 引言 

新一代的Web语言VRML(Virtual Reality Modeling Lan— 

guage1,是一个三维造型和渲染的图形描述性语言,它的描述 

构建r通过争球Intemet和wI’rld Wide Web上的超链接而 

形成的虚拟世界。作为分布式、多媒体集成.平台无关,实时町 

交瓦的一维造型和渲染的开发工具,VRML的应用范围不仅仅 

在诸如导游导购等同络领域,而 在本地主机 运行时.由于 

小再至网络传输速率的限制,运行效果更好,如3D游戏、多蝶 

体制作 教学演示系统、实时训练系统、仿真系统等。由于 

VRML综台r现有三维软件的景象描述语言的优点.因此利用 

VHMI 将为虚拟场景的建立提供极大的便利。 

2用VRML灵活高效地创建三维场景 

VRML的场景图由一系列包古对象的形状和描述信息的 

点构成。节点足组成3D场景的基本元素。VRML由6o多种 

娄型的节点组成,每个节点用米完成某一特殊的功能 节点包 

括一系列的域.这些域用来保存定义该功能所需参数的数值, 

例如Cone节点定义如F: Cone{field SlaT1Qat bottomRadius 1 

field SFl at Height 2I 

其巾域‘bottomRadius 和“h 小t”分别定义 倜锥底而的 

半径f】m)和高度(2m)。VRMI 场景图具有清晰的“场景图层 

扶 ,类似于一棵倒立的树 所谓“场景罔层次 是指父节点与子 

节 之间的关系。例如,要求在空间坐标(1,1.I)显币红色的嘲 锥,其场嚣图层次如图1所示 由于缺省状态下,VRML中的实 

体以空间坐标系的(0,0,01为中 位置使用Transform节点可 

实 平移.然后定义Shape子节 束描述实体的特征,宴倬的 

持征义由Appearance子节点来描述实体的外观以及Cone子 节 来描述实体的几何形状 宴体的外观卫可用materlal子节 

点米描述实体的颜色 通过上述的场景冈层次就可以定义~十 红色的圆锥并在其Trmls ̄rm父节点的作用下移动到目标位置 

(1,1,1)。 

图I VRMI_场景图层次示例 

采用符合VRML规范的字符对节点进行描述,然后将这 

些节点按照特定的场景图层次进行组台,形成ASCII文本格式 

的VRML源文件( .wr1),并被VRML测览器解释执行,从而在 

浏览器中显示所构造的3D场景 相比而言用典型的程序语 

言最_十的方法(如OpenG1 )建立3D空间则要复杂许多 因此, 可以和用VRML文件灵活高效地构建三维虚拟场景。 

3 用VRML建立场景的实时交互 

VRML允许用户的行为能够实时作用于场景, 户不仅可 

以在场景中随意漫步,甚至可“随时启动一个“事件 ,比如:碰 

到了 个物体,发出了巨大的碰撞声;遇到了一个fq,亲自把它 

打开,旋转灯钮来控制灯光的亮度等等 这种^机交互是建立 

在事件基础上的。事件(Event)是包含一些数据的信包,它被用 

来作为状态政变的触发器 产生事件的最初原因是环境变化、 用户交互或时问推移。场景节点通过事件八几(eventIn)接收事 

作者简介:陈华.女,博士研究生 研究方向:网络多媒体以及虚拟现实拄术 陈福民,男,博士导师,教授,研究方向:高速通信及网络多媒体拄术 

计算机工程与应用2002 6 127

 维普资讯 http://www.cqvip.com 件,通过事件出口(eventOut)发出事件,一个节点的事件出口和 

另一节点的事件凡u之间用于传递事件的通路称为路由 

(Route).用此.通过路由将节点联系成为事件体系是使VRML 具有动奄交互能力的机制(见图2) 

^事件 5 

囤2 VRML的交互机}5I 

3 l使用感应器节点的交互 

VRMI 定义了9种感应器(sensorj节氟类 ,其中4种感 

直环境变化(如时间推移),称为环境感应器,另外5种感应用 

操纵指点 殳备(如鼠标)的动作,称为指点设备感应器一感腕 

器感应到的事件一 发生,则由执彳亍引擎根据路由指示向目标 

发送,并被目标节 处理,这种处理可能改变 点状态、产 

牛其它事件,或者修改场景图结构,从而为场景提供了动志性 

例如,为了使虚拟场景中的某个对象对鼠标的点取作山反应, 

町以设1I感应器节 :F而以州户鼠标单击打开虚拟场景中的 

-盏灯为倒: 

DEF TS TouchSen ̄r{) 定卫个“接触感应器”节点 DEF lamp Dansfo ̄r,{-l_…} 定义被感应时象“#l”的节点 DEF lamplight DireetionalLight(#定义光源节烹 

∞l0r【【0 光标l忭用r场景的颤色 帅FALSE 光楫是否作用于场帚,初值设为’芰闭光源 

HOUTE TS i ̄ctive TO lamplight l_0Ⅱ#建立感应器输出到场 

景节点改变的路由 由于“灯 节 被定义为感应器对象,占一FI被鼠标点取, 

则激活该 接触感应器 (糠节点)发出“被点取 的消息 

(eventOuts),然后按照路由指示.发送“灯亮”的消息(eventln. ̄) 到光源节点(甘标节点J,完成用户“升灯”这一与场景之间交 

的动作。 3.2使用Script节点的交互 

依靠感应器所能感应的事件来提供的交互行为毕竟有限, 

为了支持更多事什的处理.VRML定义丁脚本节点Script。 

Script节点包含一组利甩脚本描述语言(如V rrrdScHpt, 

JavaScript和Java)编写的函数。Script节电收到事件后将执行 

相应函数,函数能通过常规的路由机制发送事件.或直接向 

Script节 指向的节点发送事件。脚本逆可 动态地增加或删 

除路由,从而修改事件路由的拓扑结构。对于上述用户“开灯” 

的交互.设计如下: DEF'IS TouchSen ̄r{}#定义一十”接触感应器”节点 DEF】amp Frans ̄rmfl_ } 定卫被感应对象”灯 的节点 DEF]ampllgh,肼 d;0n Li nIf#定义光潭节点 color I 1 0 光源作用于场景的颜色 On FALSE 光源是舌作用于场帚,初值设为 关闭光源” 

l28 2o02.6计算机工程与应用 DEF ch Pe Script{#定义脚奉节点 eventOut SFB ̄I[ampset 定义执行脚事后的拄出事件 eventln SPTime totoueh 定义崩动脚牟的^事件 url”v ̄nlscrip!: 定义脚本的描述语 function totoueh() 定义脚奉中的执行函数 [ampset=TRUE;} #设定发出事件 

I ̄OUTE TStcmchl'iale TO chmlgeIotouch 醴定感垃器触发脚车 执行的路由 ROUTE changelampset TO Iampllgh,set_on#世定脚车输出到场 景节点改耍的路由 用户鼠标点取 灯”节点.激活感应器节点盎出 件.并由 

感庞时间触发r脚率的执行。脚l车中的执行函数使脚本输出 “打l什光源 所需的参数值.并将此事件发送到场景中的光蔼 

点.从而建立r由Script节点构造的用』 与场最问的交互 

3 3使用VRML EAl方法 

VRMI 内部定义的感应器节点H能感应特定的事件, Script节点也只能设计按照预定规则改变场景 点数据的甬 

数,然后将此甬数输出路由至目标节 由 实现外音【;一直 程 序的数据与VRM1 文件的节 数据进行交互 则需要采用 

VRM1 的1 ^I(External Authoring Interface外部程序接口)方 }土 具体 言.谚力法依赖于一个与VRML浏览器 联系的 

Java包的支持 饿Java包南Vrttd.external V rrtd.extema1.tield 

Vml_externa1.exception三部分组戚.这 包装的娄提供r以下 

一 种能力: (1)控制VRML浏览器的工作状态 

l21发连事件到 ̄.q:tML场景节氨的事件凡E 

1])接收来自VRMI 场景节点事件出u发出的事件 

以带有VRMI 插件(如Cosmoplay2 1)的htternet Explorer 

4 0的VRMI.浏览器为例,为r宴现用 从外郭应用程序束控 

制 开幻”的交互.其执行函数如下: funetJon lUFntln()11设定执行交 的函数 { r l ̄npset=TRUE;//设定” 亮’的参数值 Ihel3rowser=Bn)wser eIH…er(1;//获取VRML蒯览器【场吊l对象 myobject=theb ̄wsergetNode( lampligh,”);/ 获取谈场景中的光 

源 节点对象 myEvent=myobject.getEventln(" ̄1一on");//设定场景中藏节点内准 

备接懂事件的域 叫Event setValue([ampset):}//设定政在场景中谊节点的事件 通过vRML EAI方浊.可以将VHML场景和其中的节点 

视为对象.并以事件为基础,实现VRM1 场景与外部应用程序 

之间的数据传递 当然,不同的VRML浏览器须采Hj不同的方 

法来实现VRML EAI。具体情况需要参见该浏览器相麻的嚏明 

文档。 乜之.事件为节点提供r接收外界消邑以厦向外界发送消 

息的能力,因而基于事件的交互构成 VRML的交互场景,此 外,VRML的图形渲染是“实时”的,通过在VRML文件中接受 

随时间而改变的一系列节点数据,就能在VRML浏览器中显 

示实时交互的场景