基于SAI的X3D虚拟场景实现方法的研究

来源 :北京电力高等专科学校学报 | 被引量 : 0次 | 上传用户:hutao95
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  一、引言
  X3D虚拟现实技术的应用不再仅限于军事和科研,在网上购物、电子商务、虚拟旅游和网络游戏等方面的应用极大的促进了基于Web的X3D虚拟现实技术发展。X3D已成为构建网络虚拟现实系统应用的前沿技术,而交互性是虚拟现实系统的重要特性之一。X3D吸收了JSAI和EAI的优点,合并了这两种体系结构,并进行了扩充,推出场景访问接口(SAI)规范,符合SAI规范的实现将不再存在兼容性问题。
  二、X3D动态场景的交互方法
  (一)X3D虚拟场景运行时对象构成
  X3D是一种面向对象的标准,且用户和虚拟场景的交互是一种运行时交互,在运行时用户代码要访问和控制的对象是虚拟场景及其包含的对象,因此需要对虚拟场景的运行时对象构成有所了解。一个已装载且已显示的虚拟场景主要由浏览器、场景、节点、域、事件等对象构成,这几个对象是用户代码要访问和控制的主要对象。
  (二)动态场景的交互
  X3D场景创作界面SAI(Scene Authoring Interface)为所有脚本语言的内部和外部交互提供了一致的功能。VRML中并不是这样的,VRML中的Java和ECMAScript使用差别很大的编程模型。X3D SAI通过指定一个统一的可以影射到任何编程/脚本语言的抽象服务集来解决这些问题,,它改善了VRML97中存在的问题,可以建立更强健更可靠的执行方式。对于SAI接口来说它也分为内部和外部两种使用方式,场景的内部存取采用Script节点方式,场景的外部存取则采用其它应用程序来存取。总的来说,SAI的场景内部存取类似于VRML的内部编程接口,SAI的场景外部存取类似于VRML的外部编程接口。X3D通过更改结点的域值来进行场景的交互,它支持四种类型的节点域的存取方式:(1)initializeOnly,允许为域提供一个初始值,但不允许再改变这个值,对应VRML中的field;(2)inputOnly,允许节点可以接受事件以改变域值,但不允许读取域值,对应VRML中的eventln;(3)outputOnly,允许节点在域值改变时输出一个事件,但不允许写入域值,对应VRML中的eventOut:d.inputOutput,完全允许存取域:可以为域提供初始值,或节点接受到事件时可以改变域值,或当节点域值改变时发送事件,对应VRML中的exposedField。但是在X3D中,Script节点可以定inputOutput域,对应与VRML的exposedField,而在VRML的Script节点中却不可以定义exposedField。另外,VRML97需要脚本在运行时开始之前必须被载入,X3D去除了这个要求,X3D文件首先开始运行时状态,然后再载入外部资源(脚本、纹理、声音、外部原型等),因此所有内容的载入将为迟缓载入。这样就加强了X3D对内部场景存取的控制能力同时也加快了文件的载入速度。另外在编译对SAI外部场景操作的*.java文件时,一定要使用为Java语言提供的附加包import org.web3d.x3d.sai.*才可以正确编译。
  三、SAI及其方法参考
  (一)SAI及方法参考
  SAI是X3D标准关于虚拟场景交互的规范。用户代码可以通过SAI访问和控制X3D运行时对象,从而实现和虚拟场景的交互。SAI定义了从虚拟场景内部或外部程序和虚拟场景进行交互的接U,这个接口是如何操纵场景的一种协议。SAI提供了五种访问虚拟场景的方式:
  (1)对浏览器操纵场景功能的访问;(2)接收浏览器行为的通知,如无效的URL,浏览器初始化完毕,浏览器已关闭等;(3)发送事件到场景节点的输入域;(4)读取场景节点输出域发送的域值;(5)监听场景节点域值的改变。
  X3D是一种面向对象的标准,节点、域,包括场景等都是一个个的对象,X3D和SAI定义了这些场景对象的属性和方法,也制定了访问这些对象的方法。值得注意的是,SAI制定的只是一种规范,可以用任意一种基于网络的语言实现这些规范。X3D官方的X3D小组用Java语言实现了SAI规范,Xi3D实现的关于SAI的类库,放在org.web3D.x3D.sai包下。以下是该包对一些重要对象的方法的定义和访问这些对象的途径的定义。
  (二)SAI交互
  X3D利用内插器、感应器节点交互只能实现简单的行为。为此,X3D定义了脚本节点Script。Script节点是一种控制传感器和内插器的节点,通过它可以定义和改变场景中对象的外观和行为。其包含了一组利用脚本描述语言(如:ECMAScript/JavaScript)编写的函数,以支持更多事件的处理和复杂的或具有逻辑性的行为。但ECMAScript/JavaScript源程序都融合在X3D程序中,用户无法实时修改有关参数;不同的浏览器及使用不同的插件又会产生不同的效果。因而,本文在Script节点中的交互意在使用SAI。
   为达到动态、交互控制,可以利用节点创建接口SAI,即脚本编程接口的方法来实现。SAI是在浏览器内部同样利用Script节点对场景的节点进行访问的。X3D内部Script节点的URL域可以包含一段JavaScript程序或者是链接的一个Java文件。当DirectOutput域为False时,可以将Script节点理解为事件通路上的一个智能节点,它接收事件输人,对其处理后产生事件输出,这条事件是通过路由Route指定的。当directOutput为True时,程序可以获得其他节点的引用,并直接对其域进行赋值,而不必遵从Route指定的事件通路。
  SAI利用Script节点将Java和X3D联系起来。在Script节点中,用url域指出被编译过的Java程序(*.class)所在,Java程序随*.X3D程序一起直接运行。Script节点是利用Java语言提供的开发包vrml.*,vrml.field.*,vrml.node.*实现交互的。主要实现以下功能:(1)对Script节点中用户定义的接口域(field)进行操作。接口域是场景和脚本之间的公共接口,在Java类库的Script类中,提供了方法getField()来实现脚本节点中接口域对象的引用。通过上述方法所获取的对象是一个抽象对象,需要把它转换成相应的子类型,然后调用子类型中相应的方法进行操作;(2)对Script节点中的事件域进行访问。在Script节点中可以定义人事件(EventIn)域和出事件(EventOut)域,Script类中定义了方法getEventln()和方法getEventOut()。入事件对象和出事件对象的引用,同样需要转换成相应子类对象,然后调用相应方法进行操作。出事件接口可以读写,人事件接口是只写域;(3)对Script节点中域对象表示的节点的域和事件进行访问。Vrml.Node类中定义方法getExposedField(),getEventIn()和getEventOut()实现对节点的可见域、人事件域、出事件域对象进行引用。从而,通过节点可见域值的改变,完成与X3D场景的交互过程。
  四、X3D虚拟场景和Java交互的实现方法
  (一)虚拟场景和Java内部交互的实现方法
  内部交互是指虚拟场景通过Script节点和脚本代码的交互,这时脚本代码和Script节点构成场景图的一部分,因此称之为内部交互。Script节点是-个专门用于和脚本交互的节点,可在Script节点中设置输入域和输出域,设置路由使场景中的其他节点与Script节点联系起来。Script节点的URL域可以包含一段可执行的脚本代码(如JavaScript程序或者是链接的一个Java Class),当与Script节点有联系的节点发出事件时,事件通过路由传给Script节点的输入域,Script节点则通过URL域中指定的地址找到脚本代码并进行处理,将处理结果传递给Script节点的输出域,再通过路由传递给场景中的其他节点,完成一个交互过程。
  脚本代码必须满足一定的规范才能和场景通信,SAI制定了这个规范,这个规范的主要内容是脚本如何准确无误地获得场景的状态和信息,该规范同时也指定了脚本处理的过程。
  X3D实现了这个规范,为了和场景交互,脚本代码必须实现X3DscriptImplementativon接口,该接口的方法就是场景提供的功能服务,用户代码必须实现这些方法,这些方法具体如F:
  (1)void setBrowser(Browser browser)。该方法传递给脚本代码一个浏览器的引用,这个引用就是参数browser。这是脚本获得浏览器引用的唯一途径,所以如果需要在后面的处理中使用到浏览器引用,那么必须在这个方法的实现里保存这个引用。这个方法也是脚本第-个执行的方法;(2)void setFields(X3DScriptNode externalView.java.util.Map fields)该方法为脚本代码送入相应Script节点定义的域列表(参数fields),同时也送入了Script节点的一个引用(参数externalView)以便脚本代码可以直接添加路由到Script节点本身,或从Script节点本身删除路由。该方法在setBrowser方法之后initialize方法之前执行;(3)void initialize()。该方法提醒脚本所有的初始化工作已经完成,脚本代码已被纳入场景图且处于活动状态。这时,用户代码可以进行自己的初始化;也可以}方问脚本节点的域值或改变域的值;还可以为域没置一个事件监听器,使监听器能够捕捉到域发送或接收的事件从而进行相应响应;(4)void eventsProcessed()。该方法表示当前事件队列中的所有事件已处理完毕;(5)void shutdown()该方法表示当前脚本已不再被场景使用,用户代码可以在此方法的实现里进行一些析构工作,如释放拥有的资源等。
  (二)虚拟场景和Java外部交互的实现方法
  外部交互是指虚拟场景和外部程序的交互。外部程序和虚拟场景交互的一般步骤和主要内容是:(1)建立连接,获得浏览器对象,如何获得浏览器对象引用的方法已在第3章详细介绍。通过浏览器对象完成加载场景、置换场景等操作;(2)通过浏览器对象访问场景对象;(3)通过场景对象访问节点对象;(4)通过节点访问域对象,包括设置域值、监听事件等。
  下面以一程序来说明虚拟场景和外部程序交互的过程。先,创建一个场景,存为X3D文件object.X3D,场景图内容和上例相比,只有造型节点,没有Script节点和路由。外部程序是一个基于Java Swing的桌面程序。首先创建一个浏览器组件,置于程序界面上侧以加载和显示X3D场景。程序界面还有一个按钮控件,点击按钮将改变Box造型材质颜色。关键代码如下:
  1、创建浏览器组件,加载显示场景。
  HashMap param=new HashMap();
  X3DComponent X3DCom=BrowserFactory.createX3D Component(param);
  ExternalBrowser browser=X3Dcom.getBrowser();
  X3DScene scene=browser.createX3DFromURL(new stri-ng[]{"object.X3D"});
  browser.replaceWorld(scene);
  2、点击按钮时,改变Box造型材质颜色。
  X3DNode node=scene.getNamedNode("mat");
  X3DField field=node.getField("diffuseColor"):
  SFColor color=(SFColor)field;
  color.setValue(new float[]{0.89,0.89.0.89});
  五、总结
  X3D是构建网络虚拟现实系统和网络3D应用的前沿技术,但是它没有提供分支、选择、循环等高级程序语言能够实现的逻辑控制,而这些逻辑控制是能够实现交互性的前提和基础之一,因此它必须和Java结合才能获得高级的逻辑控制和网络应用能力.构建完善的交互性好的刚络虚拟现实系统应用。X3D提供了构建虚拟场景的方法,同时也制定了虚拟场景交互的SAI规范。该文对X3D虚拟场景和Java语言结合通过SAI进行交互进行了探讨,介绍了X3D虚拟场景内部交互和外部交互的实现方法。应用结果表明,X3D虚拟场景通过SAI和Java的交互是一种行之有效的交互方法。
  
  参考文献:
  [1]Burdea G C,Coiffet P.virtual reality technology[M].Wiley-IEEE,2003.
  [2]ISO/IEC CD 19775-2.2:2004 Information technology-computer graphics and image processing Extensible 3D(X3D)-Part 2:Scene access interface(SAI)[S].2004.
  [3]李海庆.基于X3D的虚拟场景交互架构的实现方法研究[J].系统仿真学报,2006,(8).
  [4]俞敏,杨力.VRML与外部程序交互的研究[J].计算机工程,2005,(10):82~84.
  [5]李贞培.X3D虚拟场景与Java交互研究[J].计算机工程与应用,2006,(12):67~69.
其他文献
随着工业生产的发展,工业污水的排放量日益增加。工业污水作为一大污染源,其对国民经济和人体健康的影响,已是人类面临的严重问题。世界水文专家协会主席米歇尔·奈特1996年在第30 届国际地质大会上宣布:"全世界每天至少有5 万人死于由水污染引起的各种疾病。发展中国家每年有2 500 多万人死于水污染引起的疾病。"工业水污染已引起国家的高度重视,用膜分离技术进行废水处理,已倍受关注。膜分离技术是20世纪
期刊
高校思想政治辅导员,对于在校大学生的学业、生活等方面都具有重要的指引与督促意义。现实的辅导工作,不仅在于国家培养方案的理解与执行,更在于时时处处以学生为本,根据学生自身特性,予以及时的指导与辅助,推动学生向理想中的方向前进。整顿高校辅导员队伍,提高辅导员队伍的战斗力与满意度,在大学生就业形势日益严峻的今天,成为亟待解决与深入探讨的热点话题。辅导员队伍的提高与发展,依赖于国家政策的扶持,取决于辅导员
期刊
一、特高压交流试验基地用特高压变压器主要参数  (一)试验电压及调节范围:  高压:950 -1200 kV;  低压:35kV(设计磁密按欠励磁5%考虑)。  (二)额定频率:50Hz 。  (三)高压侧中性点接地方式:中性点直接接地。  (四)1000kV变压器的型式和额定值:  型式:单相户外、油浸式、双绕组、有载调压变压器;  额定容量:40MVA;  高压绕组额定电压:(1050/€?6
期刊
一、现阶段我国大学生网络成瘾的基本特点  (一)大学生网络成瘾内容  以网络游戏成瘾为主,其他有网络色情成瘾、网络情感成瘾等,据《中国青少年网瘾报告》调查显示,网瘾群体中玩网络游戏的比例远高于非网瘾群体,网瘾网民更偏重于玩网络游戏。随着互联网技术的快速发展,仿真技术日趋成熟,而且现在的大部分大学生利用网络的水平和能力较高,对单纯的上网聊天、信息浏览、情感求助与咨询等,只会在需要的时候涉及,而不会成
期刊
如何针对高职学生做好班主任的工作呢?我认为关键是要找到了班主任管理工作的核心要素,就是"用心"。用心去了解同学们在想什么、在干什么、对什么有兴趣、对什么没有兴趣,有的放矢地开展工作,这样班主任工作才会取得事半功倍的效果。  教育是管理的目的,管理是教育的手段和方法。班主任除了平时要做好日常的基础管理之外,加强学生的德育教育是关键,它既包括对学生进行思想、信念的教育,又包括对学生进行行为、习惯的培养
期刊
一、染料生产厂酸性染料废水的处理技术  (一)降低酸度  降低酸度的方法有两种:  1、加废铁屑降低酸度,同时可制的硫酸亚铁。原理如下:  2、加入石灰降低酸度,同时可制的石膏。其原理如下:  (二)去除染料废水中的悬浮物和固体颗粒  去除染料废水中的悬浮物和固体颗粒常用的有以下几种方法,由于染料废水中成分复杂,它们往往配合使用。  1、絮凝沉淀(气浮)法——废水的预处理  常用的絮凝剂最多的是铝
期刊
有人说每一名学生就是一枚定时炸弹,在做辅导员工作的几年时间中,对这句话也是深有体会。当代的大学生无论是从认知、思维方式、价值观,甚至恋爱观等各方面都有着浓郁的80年代后人的味道,很个性,也很叛逆,随之而来的就会出现更多的突发状况。此外,随着社会环境和生活环境的不断变化,很多外界客观因素的形成,也对高校大学生的安全问题提出了更高的要求,也形成了更多的隐患。  高校常见的突发事件的类型主要有这几种:人
期刊
一、引言  教育部高等教育司于2004年1月颁布了指导高等院校大学英语课程教学的纲领性文件《大学英语课程教学要求(试行)》。其中对于阅读理解作了较大的调整,从原先的单一题型修订为3种题型:快速阅读,选词填空和传统阅读(后两者统称为仔细阅读)。修订后的《大学英语课程教学要求》也明确阐述了教学目标:培养学生英语综合应用能力,特别是听说能力,使他们在今后工作和社会交往中能用英语有效地进行口头和书面的信息
期刊
学校文化"是教师文化、学生文化、课程文化、学校物质文化和制度文化的综合体"。一个学校的建筑布局、校园环境、典章制度、校训校风、宣传栏目以及各类文化专题活动构、人际关系以及蕴含于教育教学中的人文气韵、教师人格素养等,都是一种潜在的教育力量。  教师文化是学校文化的主体组成部分,是指教师在教书育人的特定工作中一系列的知识技能、价值观念、行为方式、实践能力的总和。教师文化内隐在教育者的内心,对受教育者起
期刊
一、我国高速公路收费管理中存在的问题  (一)收费资金缺乏有效的管理,使高速公路建设存在较大的风险  由于我国的高速公路在资金的运作上时通常是遵循收费还贷的运作模式,但是,现在所存在的普遍问题是高速公路在通车后收费所得的资金并未完全按规定执行预期的还贷计划,从而大大影响了高速公路的还贷进度。所以大部分的高速公路的运营实际上承担着比较大的还贷压力,其预期还贷计划的完成难度较大,造成风险会大大增加,最
期刊