知识大全 VRML与JAVA在网络课件交互运用
Posted 知
篇首语:关山初度尘未洗,策马扬鞭再奋蹄!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 VRML与JAVA在网络课件交互运用相关的知识,希望对你有一定的参考价值。
VRML与JAVA在网络课件交互运用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
虚拟现实建模语言(Virtual Reality Modeling Language 即VRML)和Java语言都是 可执行的代码 技术 通过网络传输的只是一个很小的描述文件(指令性数据集) 客户端通过本地的VRML浏览器 JAVA虚拟机交互地访问这些文件并解释执行 将Java与VRML结合 能够很好地实现网络多媒体课件技术 使用VRML进行场景构造 内嵌用Java编写的程序设计实现对象的编程行为 这使VRML在网上创建充满真实感的三维虚拟世界 为用户提供一种自然的 身临其境的体验方式 包括交互性 动态效果 连续性及参与感 而这将是未来网络教学的主要形式之一
VRML简单交互
VRML简单交互 即VRML空间中各节点间数据交互 VRML有统一的数据传输接口和完善的属性集合和事件集合 可接收传感器节点发送过来的数值 并根据所对应的接口属性域设置提取数据 改变自身的属性值 触发事件进而改变自己在空间中的位置 外型和显示效果 还可以将处理后的数据送到输出域 传递给其他模型节点 各节点通过接口域的相互路由(route to)实现数据传输 路由的映射关系自由 但接口域的数据规格必须严格一致
VRML扩展交互
VRML本身交互机制是无法构建一个大型多媒体课件的 因为VRML本身不能完成普通程序设计中的转折 分支 循环等基本特征 因此实际系统设计中 可利用Java语言提供的强大网络编程能力 编写与远程系统通信和共享能力处理等功能的应用程序 Java对VRML的所有支持都通过附加的封装类实现 通过这些类 Java程序就能够访问VRML场景 接受和发送事件 从页面上得到VRML对象等 实现对VRML场景的完全控制 [ ]根据访问方式的不同 又可分为 脚本编程接口SAI(Script Authoring Interface) 交互与外部编程接口EAI(EAI External Authoring Interface) 交互
脚本编程接口SAI交互
SAI交互即使用事件机制和路由利用Script节点实现VRML与 Java(或JavaScript)的交互 首先 通过eventIn将事件传至Script节点中的脚本 其次 在Script节点中的脚本中调用相应的Java类(或JavaScript)进行处理 最后 通过eventOut将结果送回到VRML场景以实现动画或交互
VRML的Script节点是一种控制传感器和内插器的节点 通过它可以定义和改变场景中对象的外观和行为 Script节点的URL域可以包含一段JavaScript程序或者是链接的一个JavaClass SCRIPT节点可放置在场景的任何地方 用DEF命名它 从而完成事件的删除成传递 SCRIPT节点的字段是由用户延伸的 到达这些字段的字段会自动移到和SCRIPT节点相关程序中 另外 SCRIPT节点也能够通过编写合适程序脚本 动态生成(改变)三维造型并绑定合适的感应器和内插器
Java通过Script类(vrml node包)与Script结点建立联系 控制VRML结点
首先 定义Script节点中的各域域值 设置路由(Route)使VRML中的其它节点与Script节点联系起来 当与Script节点有联系的节点发生事件时 事件通过路由传给Script节点的eventIn域 Script节点则通过url域中指定的地址找到java类
然后 Java类开始工作 最先执行的是initialize()方法 在initialize()方法中必须获得Script节点中eventIn或field域的值 或者把java中的值返回给Script中的eventOut域 Script类提供的方法有 getField(fieldName) getEventIn(eventInName) getEventOut(eventOutName) 作为参数的fieldName eventInName eventOutName要与Script节点中定义的名称相符合 对应的Field类的子类(vrml filed包)与Script节点中定义的各种Type类型一致 它提供getValue()和setValue()方法
再则 通过Script类提供的processEvent(Event p )或processEvents(int p Event[] p )方法来捕获Script节点传递的事件 processEvent和processEvents方法是所有外部事件公共的输入点 Java程序通过替代这两个方法对事件做出相应的处理 Vrml包中Event类的getName()方法返回事件名称(该名称与Script节点中发生该事件的eventInName相同) 确定发生的事件 从而做出相应的处理 Event类的getValue()方法则返回一个ConstField类的实例 (它是Script节点中发生该事件的eventIn域) ConstField类是Field类的子类 它没有setValue()方法 因而只能取出Script节点中eventIn域的值 而不能修改
最后 所有事件处理完后 程序就调用Script类中的eventsProcessed()方法 在这儿可以加入用户想要实现的动画 交互等各种效果 Script类中的shutdown()方法实现离开VRML文件的方式
通过Script节点 能java程序处理过的数据返回给VRML文件 通过初始化时getEventOut()得到的变量的setValue()方法将值传递给Script节点的eventOut域 再通过路由传递给VRML中的各类节点 完成整个通信过程
Java通过Script节点和Node类(vrml node包)直接修改VRML节点
通过Script节点和路由 同时又必须在Script节点的eventOut域设置控制点 java程序才能改变VRML文件中节点值 当有大量数据需要传送时 这种给每个数据设置一个eventOut域加一个路由的方法显然是相当麻烦的 因此java 提出直接修改节点的方法
Java直接修改场景中的节点 仍然要用到Script节点 首先在定义Script节点时 将eventOut域改为field域 fieldType定义为SFNode 具体格式如下
field SFNode fieldname USE nodeName nodeName 为要修改的节点名称(在VRML中由DEF语句命名) 产生一个指向名为nodeName节点的指针 执行初始化时通过getField()方法得到相应的SFNode类的一个实例 通过getValue()方法得到该类的值 这里它的值恰好是名称为nodeName的Node类的实例 然后通过Node类提供的方法直接修改节点 getExposedField(String p ) getEventIn(String p )方法 分别得到节点的field和eventIn域 并把结果作为Field类 再通过各Field类的子类提供的方法读取和设置值 将设置结果直接返回节点 不用再设置路由 从而达到了直接修改节点的目的
Node类还提供了getEventOut(String p )方法 用它可以得到节点的eventOut域 与前两个方法不同 它得到的结果是一个不能修改的Field类 即Field类的子类ConstField类 使用改进后的方法 可以有效的缩减代码长度 节省VRML文件的计算时间 提高VRML场景的生成速度
Java通过Script节点和Browser类(vrml包)直接创建VRML场景
设置Group节点的addChindren和removeChindren的值来可添加和删除具体节点 但还无法操作路由 当有大量不同的并相互关联的节点要通过java在VRML中创建时 工作量是难以想象的 为了满足这一要求 Script类继承BaseNode(vrml包)类 BaseNode类中定义了两个方法 getBrowser()和getType() getBrowser()方法将会返回BaseNode类所处的浏览器 Browser类存在于vrml包中 它提供了一系列方法来对整个VRML文件进行控制 如
( ) 添加和删除路由 addRoute(SFNode fromNode SFString fromEventOut SFNode toNode SFString toEventIn) deleteRoute(SFNode fromNode SFString fromEventOut SFNode toNode SFString toEventIn)
( ) 直接创建VRML createVrmlFromString(SFString vrmlSyntax)(把要创建的节点语法以字符串的方式作为参数写入)
( ) 在VRML中建立相应节点 createVrmlFromURL(MFString url SFNode node SFString event)(该方法的提供节点语法的参数是放在url地址所指出的VRML文件中 浏览器通过url找到要加入的节点 把它加入到node参数指定的节点中event参数指定的eventIn域中)
( ) 用指定的节点来替换整个VRML文件 replaceWorld(MFNode nodes)
用url指定的另一个VRML文件来替换当前的文件 loadURL(MFString url MFString parameter)
Script类执行initialize()方法时 得到浏览器实例 然后processEvent(Event e)方法执行时使用上述方法建立 修改VRML场景 通过改进 不仅VRML文件代码长度缩减 java程序代码也大大减少 进一步提高了VRML场景的生成速度
外部编程接口(EAI)交互
SAI交互VRML离不开Script节点和Script类(vrml node包) 为了实现通信功能编写的java类都必须继承自Script类 但java不支持多继承 如果用Applet操控VRML场景 java程序要继承Script类的方法相当复杂 特别是要把VRML文件与Applet集成在同一个HTML页面时 用Script类来实现颇为困难 而且程序代码冗长 可扩展性差
VRML 标准提供的EAI定义了外部环境怎样通过VRML现存的事件驱动模式来访问VRML内部的节点的一系列方法 实现了Applet与VRML场景的通信 EAI包含浏览器脚本接口的全部功能 例如查询浏览器的状态 增加或删除路由 生成新的节点等功能
Java主要使用Browser和Node两个类(vrml external包) 以及其它一些如处理eventIn域和eventOut域的各个属性类(EventIn* EventOut*)和处理例外的各种*Exception类完成对EAI的描述
Browser类提供了三个方法 getBrowser(Applet pApplet) getBrowser(Applet pApplet String frameName int index)和getNode(String name)方法 前两个方法是静态方法 直接在Applet类中使用这两个方法得到Applet类和VRML所在的浏览器类的实例 getNode()方法可以直接得到VRML文件的具体节点(Node类)的实例 用InLine语句嵌入在VRML文件中的各个节点是用getNode()方法是无法得到的 这里的Node类与方法一的Node类是完全不同的 它用自己的getEventIn()和getEventOut()方法来得到VRML节点的各个域 然后使用返回的Event*的实例的getValue()和setValue()方法来控制具体的值 EventIn*类仅提供了设置值的setValue()方法 EventOut*类相对复杂 不仅提供了getValue()方法来获得当前值 还提供了监听EventOut域的接口??EventOutObserver 随时监听VRML节点中是否有新的EventOut事件发生 一旦有新事件发生 通过替代该接口提供的callback(EventOut value double timeStamp Object data)方法响应事件
通过Browser和Node类 可以抛弃Script节点和Script类甚至路由而现实对VRML文件的各种节点即Node类的各个实例直接操控 但getBrowser()方法的参数必须是Applet的实例 因而该方法只能通过Applet来控制VRML
总结
cha138/Article/program/Java/gj/201311/27349相关参考
Java进阶:Java通过JNI与Delphi交互 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Flex与java交互之数据库数据读取 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前几天有网
JAVA开放源码项目与工具在企业应用开发中的运用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java Script与Java Applet的综合运用(一)
JavaScript与JavaApplet的综合运用(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 Java Script与Java Applet的综合运用(二)
JavaScript与JavaApplet的综合运用(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
Java的网络功能与编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要Java语言是Int
JAVA与QQ网络通讯实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 准备工作: 两个QQ
配置JSP交互网站的步骤 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 网络操作系统Window
郭洪锋()该文章对编写客户服务器应用的java程序员有所帮助可以解决程序在对方出现故障的时候继续稳定运行 前言java程序要处理很多的网络数据网络数据发送和接收以及数据流的处理是java程序要特
网络工程是什么?现在实用吗在社会?网络工程是指按计划进行的网络综合性工作。本专业培养掌握网络工程的基本理论与方法以及计算机技术和网络技术等方面的知识,能运用所学知识与技能去分析和解决相关的实际问题,可