版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、虚拟现实技技术VRMML篇一、VRMML介绍1.什么是是VRMLL?VRML是是“Virrtuall Reaalityy Moddelinng Laanguaage”的的缩写形式式,意思是是“虚拟现现实造型语语言”。 第一代Weeb是以HHTML为为核心的二二维浏览技技术,受HHTML语语言的局限限性,VRRML之前前的网页只只能是简单单的平面结结构,而且实现现环境与参参与者的动动态交互是是非常烦琐琐的。第二二代Webb是以VRRML为核核心的三维维浏览技术术。第二代代Web把把VRMLL与HTMML、Jaava、媒媒体信息流流等技术有有机地结合合起来,形形成一种新新的三维超超媒体Weeb。
2、VRML是是用来描述述三维物体体及其行为为的,可以以构建虚拟拟境界(VVirtuural Worlld), 可以集成成文本、图图像、音响响、MPEEG影像等等多种媒体体类型,还还可以内嵌嵌用Javva、ECCMASccriptt等语言编编写的程序序代码。以VRMLL为核心构构建的虚拟世界界中用户如如身处真实实世界,可可以和虚拟拟物体交互互,人们可可以以习惯惯的自然方方式访问各各种场所,在在虚拟社区区中“直接接”交谈和和交往。事事实上,目目前采用VVRML技技术取得成成功的案例例已经很多多,例如探探路者到达达火星后的的信息就是是利用VRRML在因因特网上即即时发布的的,网络用用户可以以以三维方式
3、式随探路者者探索火星星。 2.VRMML的工作作原理VRML定定义了一种种把3D图图形和多媒媒体集成在在一起的文文件格式。从语法角角度看,VVRML文文件是显式式地定义和和组织起来来的3D多多媒体对象象集合;从从语义角度度看,VRRML文件件描述的是是基于时间间的交互式式3D多媒媒体信息的的抽象功能能行为。VVRML文文件描述的的基于时间间的3D空空间称为虚虚拟境界(Virttual Worlld),简简称境界,所所包含的图图形对象和和听觉对象象可通过多多种机制动动态修改。 VRML文文件可以包包含对其他他标准格式式文件的引引用。可以以把JPEEG、PNNG和MPPEG文件件用于对象象纹理映射
4、射,把WAAV和MIIDI文件件用于在境境界中播放放的声音。另外,还还可以引用用包含Jaava或EECMASScrippt代码的的文件,从从而实现对对象的编程程行为。 VRML使使用场景图图(Sceene GGraphh)数据结结构来建立立3D实境境,VRMML的场景景图是一种种代表所有有3D世界界静态特征征的节点等等级:几何何关系、质质材、纹理理、几何转转换、光线线、视点以以及嵌套结结构。几乎乎所有生产产厂商,无无论是CAAD、建模模、动画、VR,还还是VRMML,他们们的结构核核心都有场场景图。 境界中的对对象及其属属性用节点点(Nodde)描述述,节点按按照一定规规则构成场场景图(SSc
5、enee Graaph),也也就是说,场场景图是境境界的内部部表示。场场景图中的的第一类节节点用于从从视觉和听听觉角度表表现对象,它它们按照层层次体系组组织起来,反反映了境界界的空间结结构。另一一类节点参参与事件产产生和路由由机制,形形成路由图图(Rouute GGraphh),确定定境界随时时间的推移移如何动态态变化。 VRML文文件的解释释、执行和和呈现通过过浏览器实实现,这与与利用浏览览器显示HHTML文文件的机制制完全相同同。浏览器器把场景图图中的形态态和声音呈呈现给用户户,这种视视听觉呈现现即所谓的的虚拟世界界(境界)。用户通通过浏览器器获得的视视听觉效果果如同从某某个特定方方位体验
6、到到的,境界界中的这种种位置和朝朝向称为取取景器(VVieweer)。 3.VRMML的应用用VRML在在电子商务务、教育、工程技术术、建筑、娱乐、艺艺术等领域域有广泛的应用。 例如在教育育上,VRRML不仅仅仅是HTTML功能能更强的替替代品,其其潜在意义义在于突破破上述基于于WWW的的教学模型型建立更自自然、更真真实的虚拟拟教育环境境。在这种种环境中学学生可以以以浏览探索索的方式汲汲取知识,如如进入虚拟拟太空学习习天文知识识,利用虚虚拟地球学学习地理知知识,穿过过历史长廊廊与历史人人物交流,进进入分子世世界游历化化学殿堂等等等,这些些曾经是梦梦想中的学学习方式都都可以逐步步实现。在在这个虚
7、拟拟教育世界界中,甚至至可以有利利用VRMML制作的的动画人物物扮演教师师,其面部部表情和形形体动作利利用动作跟跟踪系统捕捕捉下来,这这样得到的的讲课节目目将是三维维的。如果果把这种方方式扩大到到教学双方方,则可实实现具有实实时交互性性的虚拟教教学教教师控制的的虚拟教师师和学生控控制的虚拟拟学生就可可以在一个个虚拟教室室中相互交交流。 4.VRMML的工作作组及其研研究目标 为了推动VVRML技技术的发展展,VRMML协会组组织了很多多工作组,每每个工作组组都是自愿愿组织、自自我约束、并经VRRML协会会认可的技技术委员会会,负责某某个与VRRML有关关的专题技技术的研究究和实现工工作。人性动
8、画工工作组(HHumannoid Animmatioon WGG)利用VVRML表表现人类行行为特性。 色彩保真工工作组(CColorr Fiddelitty WGG)确保采采用任何平平台的观众众所看到的的效果都和和创作者的的原始作品品一样,颜颜色应相当当一致。 元形式工作作组(Meeta FFormss WG)针对利用用形式文法法生成的作作品,提出出一般性的的方法论和和一般性规规范,使之之能够映射射为某种特特定形式。首要目标标是能够表表示数字字生命格式式( DDigittal LLife-Formms)结构构和增长。 面向对象扩扩展工作组组(Objject-Orieentedd Extten
9、siions WG)探探讨和推动动对VRMML进行面面向对象扩扩展的方法法。 数据库工作作组(Daatabaase WWG)推进进基于VRRML商业业应用的创创建,利用用数据库维维护VRMML 内容容的持久性性、升级能能力和安全全传输能力力。 外部创作接接口工作组组(Extternaal Auuthorring Inteerfacce WGG)在VRRML境界界和外部环环境之间建建立标准接接口。 界面组件工工作组(WWidgeets WWG)为开开发者和用用户提供一一套基础性性的、可自自由使用的的标准用户户界面组件件集,并提提供支持基基本组件集集和所有VVRML组组件的理论论框架。 二进制压缩
10、缩格式工作作组(Coompreessedd Binnary Formmat WWG)探讨讨并开发VVRML文文件的二进进制编码方方法,重点点是研究为为了快速传传送目的而而尽量缩小小文件尺寸寸,同时为为了快速解解码目的而而尽量简化化文件结构构。 通用媒体库库工作组(Univversaal Meedia Librrariees WGG)为了提提高VRMML境界的的真实感,同同时减少网网络的下载载量,而定定义一种由由驻留本地地的媒体元元件(纹理理、声音和和VRMLL对象)组组成的小型型跨平台媒媒体库。同同时定义一一种统一机机制,通过过这种机制制,VRMML内容创创作者可以以在自己的的境界中使使用这些
11、媒媒体元件。 活动境界工工作组(LLivinng Woorldss WG)为多用户户(包括多多个开发者者)应用的的产生和进进化定义概概念框架,并并确定一组组界面。 键盘输入工工作组(KKeybooard Inpuut WGG)为了使使内容创作作者能够在在自己的境境界中访问问键盘输入入,定义一一个或多个个扩充节点点。 一致性工作作组(Coonforrmancce WGG)为与一一致性测试试有关的问问题提供一一个讨论场场所,特别别地,本组组将辨别VVRML实实现发生分分歧的地方方以及相应应的动作序序列。 生物圈工作作组(Biiota WG)为为生命系统统(Livving Systtem)的的研究和
12、学学习建立、配备数字字式工具和和环境。 分布式交互互仿真工作作组(Diistriibuteed Innteraactivve Siimulaationn WG)为建立有有多广播能能力(Muulticcast-Capaable)的大规模模虚拟环境境(Larrge-SScalee Virrtuall Envvironnmentts,LSSVEs)确立初始始网络约定定。 VRML脚脚本工作组组(VRMML Sccriptt WG)向VRMML监查组组(VRMML Reevieww Boaard,VVRB)提提供有关JJava和和JavaaScriipt的问问题列表、修改建议议和评论。 自然语言处处理
13、和动画画工作组(NLP & Annimattionss WG)为了使用用户能使用用自然语言言和VRMML动画形形象进行交交流,从而而使交互更更自然,增增强用户和和动画形象象之间的信信息流动,研研究如何使使用“问题题/回答”、“命令令/响应”式的对话话以及基于于操作系统统命令和字字符控制的的自然语言言。 VRML-DHTMML集成工工作组(VVRML-DHTMML Inntegrratioon WGG)为VRRML和DDHTMLL在文档对对象模型、组件(CCompoonentt)接口和和绘制等三三个层次的的紧密集成成开发一种种概念模型型。 6.研究现现状VRML997发布后后,互联网网上的3DD
14、图形几乎乎都使用了了VRMLL。由于技技术的局限限性,如带带宽不够,需需要下栽插插件浏览,文文件量大,真真实感、交交互性需要要进一步加加强等原因因,最近一一二年,许许多制作WWeb3DD图形的软软件公司的的产品,并并没有完全全遵循VRRML977标准,而而是使用了了专用的文文件格式和和浏览器插插件,开发发了比较实实用的VRR软件。这这些软件有有些比VRRML有了了进步,在在渲染速度度、图像质质量、造型型技术、交交互性以及及数据的压压缩与优化化上,都有有胜过VRRML之处处。比如,CCult33D、Viiewpooint、GL4JJava、Pulsse3D、Flattlandd、Flaash、J
15、JPEG22000等等。 CULT33D、VIIEWPOOINT、360度度环视等技技术正被应应用。以Blaxxxun和和ParaallellGrapphicss公司为代代表,它们们都有各自自的VR浏浏览器插件件,并各自自开发基于于VRMLL标准的扩扩展节点功功能(X33D),使3DD的效果,交交互性能更更加完美;支持MPPEG,MMov、AAvi等视视频文件,RRm等流媒媒体文件,WWav、MMidi、Mp3、Aifff等多种音音频文件,FFlashh动画文件件,多种材材质效果,支支持Nurrbs曲线线,粒子效效果,雾化化效果;支支持多人的的交互环境境,VR眼眼镜等硬件件设备;在在娱乐、电电
16、子商务等等领域都有有成功的应应用,并各各自为适应应X3D的的发展,以以X3D为为核心,有有Blaxxxun33D等相关关产品。在在虚拟场景景,尤其是是大场景的的应用方面面,以VRRML标准准为核心的的技术具有有独特的优优势。二、初识VVRML(一)VRRML的文文件结构1.文件头头VRML22.0(VVRML997)开头头如下:# VRMML V22.0 uutf8VRML是是大小写敏敏感的,uutf8是是指一种纯纯文本编码码方式2.场景图图(Sceene GGraphh)由描述“对对象及其属属性”的节点组组成,节点点是VRMML的基本本单元,场场景图的第第一类节点点用于从视视觉和听觉觉角度表
17、现现对象,它它们是按照照层次体系系结构组织织的;另一一类节点,则则参与事件件产生和路路由机制。3.原型(PProtootypee)用户可以通通过原型扩扩充VRMML的节点点类型集。原型的定定义可以包包含在使用用该原型的的文件中,也也可以在外外部定义。4.事件路路由(Rooute)有些VRMML节点能能通过产生生事件响应应环境变化化或用户交交互。事件件一旦产生生,就按时时间顺序向向路由目标标节点发送送。目标节节点接收后后进行相应应处理,可可改变节点点状态,产产生其他事事件,或者者修改场景景图的结构构。利用脚本节节点Scrript,作作者可以JJava或或JavaaScriipt语言言自定义任任意
18、事件处处理。(二)VRRKL节点点和数据类类型虚拟场景由由对象构成成,对象及及其属性用用节点(NNode)描描述,节点点是构成VVRML文文件的基本本单元。VRML997定义了了54种基基本节点类类型(内部部节点类型型),用户户也可以通通过原型机机制定义自自己的节点点类型。节点由域和和事件组成成:1.域(ffieldd) 描述了节点点的当前状状态。其中中外露域(eexpossedFiield)是是域和事件件的统一体体,它既作作为域描述述节点,又又隐含着形形如“set_域名”的入事件件和“域名_cchangged”的出事件件。2.事件(eeventt)分为入事件件和出事件件,入事件件将导致节节点
19、状态的的改变;出出事件向外外报告自身身状态的变变化。(三)VRRML浏览览器 BBlaxxxun CContaact 33DCosmoo PlaayerVisvaape等Microosoftt VRMML2.00 Vieewer(四)编写写VRMLL境界1.制作第第一个虚拟拟境界#VRMLL V2.0 uttf8Groupp childdren SShapee ggeomeetry Box 将将它保存为为SimppleWoorld.wrl文文件,则可可以用浏览览器看到它它。 22.定义外外观第二场场景再定义立方方体的外观观,即改变变Shappe节点的的appeearannce域(外外观),aa
20、ppeaarancce域是一一个节点,此此节点的mmaterrial域域定义为一一个Matteriaal节点: 则则Shappe节点变变成了:Shapee appeearannce Appeearannce materrial Mateeriall geomeetry Box 修改改它的diiffusseCollor域(漫漫射色),应应该是 1 0 0 ,33个数字分分别表示红红色、绿色色和蓝色,取取值范围是是0到1:materrial Mateeriall ddiffuuseCoolor 1 0 0 这样,生生成了第二二个场景文文件:#VRMLL V2.0 uttf8Groupp child
21、dren SShapee aappeaarancce AAppeaarancce materrial Mateeriall ddiffuuseCoolor 1 0 0 ggeomeetry Box 33.定义变变换第三个个场景若想移动这这个红色的的立方体,可可以通过为为它外套一一个Traansfoorm节点点来实现: TTranssformm ttransslatiion 55 0 00 cchilddren Shhape appeaarancce AAppeaarancce materrial Mateeriall ddiffuuseCoolor 1 0 0 ggeomeetry Box T
22、ranssformm节点的ttransslatiion 55 0 00表示x轴轴向上右移移5个单位位(米)则第三个场场景完整代代码如下:# VRMML V22.0 uutf8Groupp childdren Trransfform transslatiion 55 0 00 childdren Shappe appeaarancce AAppeaarancce materrial Mateeriall ddiffuuseCoolor 1 0 0 ggeomeetry Box 4.复制节节点第四个个场景 复复制节点,并并将各自的的几何形状状定义为方方块、球体体和圆椎Groupp childdre
23、n Trransfform transslatiion 55 0 00 childdren Shappe . . . geomeetry Box Transsformm transslatiion 00 0 00 childdren Shappe . . . geomeetry Spheere Transsformm transslatiion -5 0 0 childdren Shappe . . . geomeetry Conee # endd of Grouup chhildrren 为为了以后引引用方便,分分别给这33个Traansfoorm节点点指定一个个名称: DDEF bbox
24、TTranssformm . . . DEF SSpherre Trransfform . . . DEF ccone Trannsforrm . . . 则第四个场场景的完整整代码是:# VRMML V22.0 uutf8Groupp childdren DEEF boox Trransfform transslatiion 55 0 00 childdren Shappe appeaarancce AAppeaarancce materrial Mateeriall ddiffuuseCoolor 1 0 0 geomeetry Box DEF sspherre Trransfform t
25、ransslatiion 00 0 00 childdren Shappe appeearannce Appeearannce materrial Mateeriall ddiffuuseCoolor 0 1 0 geomeetry Spheere DEF ccone Trannsforrm transslatiion -5 0 0 childdren Shappe appeaarancce AAppeaarancce materrial Mateeriall ddiffuuseCoolor 0 0 1 geomeetry Conee # ennd off Grooup cchilddren将
26、此文件保保存为FiirstWWorldd.wrll,用浏览览器观看,可可从多个方方位浏览自自己的作品品。(五)交互互能力的加加入1.传感器器 是是交互能力力的基础,共共9种。在在场景中,传传感器节点点一般是以以其他节点点的子节点点的身份存存在的,它它的父节点点称为可触触发节点,触触发条件和和时机由传传感器节点点类型确定定。 接接触传感器器(TouuchSeensorr)是最常常用的传感感器,先了了解一下开开关节点llighttSwittch(组组节点),并并定义一个个接触传感感器作为它它的子节点点: DEF llighttSwittch GGroupp cchilddren 各各几何造型型节点
27、 DDEF ttouchhSenssor TTouchhSenssor 传传感器能引引起某种变变化,下面面看场景变变化。2.视点当你拖动鼠鼠标或按动动箭头键时时(按照VVRML术术语,称为为航行),虚虚拟境界就就会旋转或或缩放,这这实际上是是在调整你你的视点位位置或视角角。在虚拟拟场景的重重要位置可可以定义视视点节点(VViewPPointt),它们们是境界作作者给用户户推荐的上上佳观赏方方位,在CCosmooPlayyer浏览览器中,用用户就可以以通过鼠标标右键选择择作者推荐荐的各个视视点。这里里我们定义义两个视点点节点:DEFF vieew1 VViewppointt “viiew1”是编
28、程时时引用的名名字poositiion 00 0 220 deescriiptioon VView11 “Vieew1”是是浏览器上上显示的名名字 DEFF vieew2 VViewppointt poositiion 55 0 220 deescriiptioon vview22 目的是是使用户可可以通过触触发开关节节点来切换换视点。视视点节点中中的坐标表表示视点在在场景中的的位置,坐坐标的单位位是米,视视点的名称称将会在浏浏览器菜单单中提示出出来供用户户选择。把把上述视点点说明加入入hellloworrld2.wrl中中(放在GGroupp节点之前前),并把把其中的方方块节点修修改成可触触
29、发节点: DEEF boox Trranfoorm chhildrren SShapee . Box . DDEF ttouchhBox ToucchSennsor 定义触发发节点 把修改改过的文件件另存为“toucchme.wrl”。3.事件传传递下面把触发发(用鼠标标箭头按动动方块)和和场景变化化(视点切切换)这两两件事情联联系起来,在在场景图中中,除节点点构成的层层次体系外外,还有一一个“事件件体系”,事事件体系由由相互通讯讯的节点组组成。能够接收事事件的节点点都应具有有事件入口口(eveentInn),如果果它要接收收多种类型型的事件(称称为入事件件),它就就应该具有有多个事件件入口,
30、也也就是说,事事件入口象象节点的域域一样是有有类型的。同样,发发送事件的的节点应有有事件出口口(eveentOuut),事事件出口也也是有类型型的。例如如ViewwPoinnt节点就就有一个事事件入口sset_bbind,当向此事事件送入一一个值“TTRUE”(即所谓谓的入事件件)时,该该viewwpoinnt节点成成为当前视视点。又如如,接触检检测器ToouchSSensoor有一个个事件出口口isAcctivee,当受到到用户触发发后它就从从此出口送送出一个“TRUEE”(即所所谓的出事事件),在在下一个事事件发送之之前,此事事件一直保保存在事件件出口中(作作为记录)。 事件出出口和事件件
31、入口通过过路径相连连,这就是是VRMLL文件中除除节点以外外的另一基基本组成部部分:ROOUTE 语句。RROUTEE语句把事事件出口和和事件入口口联系在一一起,从而而构成事件件体系。在在这里,我我们是把接接触检测器器toucchBoxx的事件出出口isAActivve连接到到视点节点点vieww2的事件件入口seet_biind: ROUUTE toouchBBox.iisActtive TO vview22.sett_binnd 现在我们得得到的VRRML文件件是: #VRRML VV2.0 utf88 DEEF viiew1 Viewwpoinnt 视点点pposittion 0 0 2
32、0 ddescrriptiion vieww1 DEEF viiew2 Viewwpoinnt pposittion 5 0 20 ddescrriptiion vieww2 Grroup cchilddren DEF box Trannsforrm traanslaationn 5 00 0 chhildrren SShapee appeearannce AAppeaarancce matteriaal Maateriial diiffusseCollor 11 0 00 geommetryy Boxx DDEF ttouchhBox ToucchSennsor 触感 DEF spheere
33、 TTranssformm traanslaationn 0 00 0 chhildrren SShapee appeearannce AAppeaarancce matteriaal Maateriial diiffusseCollor 00 1 00 geommetryy Sphhere DEF conee Traansfoorm traanslaationn -5 0 0 chhildrren SShapee appeearannce AAppeaarancce matteriaal Maateriial diiffusseCollor 00 0 11 geommetryy Conne
34、#eend oof Grroup chilldrenn RROUTEE touuchBoox.issActiive TTO viiew2.set_bindd 传递递把这个个文件调入入浏览器,然然后把鼠标标指向方块块并按下左左钮(先别别松开!),可可以看到视视点已经变变为vieew2,内内部的机制制我们已经经很清楚:左钮按下下时方块节节点的接触触检测器被被触发,接接着接触检检测器从事事件出口iisActtive送送出一个事事件“TRRUE”,这这个事件通通过路由进进入视点节节点vieew2的事事件入口sset_bbind,vieww2收到“TRUEE”后成为为当前视点点,所以在在我们眼前前场景发
35、生生了变化。 当当松开鼠标标左键,又又回到原来来的视点,称称为视点回回跳。因为为松开鼠标标左键后,接接触传感器器向vieew2发送送了“FALSSE”事件,这这样vieew2的当当前地位被被解除。若若不想回跳跳,则要自自己来定义义。4.利用脚脚本编写自自定义行为为在VRMLL中,利用用Scriipt节点点(脚本节节点)定义义用户自定定义行为,所所谓定义即即用脚本描描述语言(SScripptingg Lannguagge)编写写脚本的过过程。VRRML977支持的脚脚本描述语语言目前有有两种:JJava和和EMCAAScriipt(这这是JavvaScrript标标准化后的的名称),关关于这两种
36、种语言本身身,请参考考相应参考考书,VRRML977标准中定定义了它们们和VRMML的接口口方法。应应提请注意意的是:VVRML是是基于节点点的语言,所所以脚本也也是封装在在Scriipt这个个特殊节点点中的。这这里我们不不过多讨论论脚本描述述语言的细细节,主要要讨论把脚脚本集成到到VRMLL文件中的的方法。 上面我我们曾把接接触检测器器toucchBoxx 和视点点vieww2直接通通过路径连连接起来,现现在要定义义我们指定定的行为,就就需要在二二者之间插插入一个脚脚本节点,也也就是让路路径绕个弯弯: ROUUTE ttouchhBox.isAcctivee TO toucchScrript
37、.toucchBoxxIsAcctivee ROUUTE ttouchhScriipt.bbindVView22 TO vieww2.seet_biind 其中的的脚本节点点toucchScrript有有一个事件件人口toouchBBoxIssActiive和一一个事件出出口binnd_Viiew2,前者接收收来自接触触检测器ttouchhBox的的事件,然然后经自己己的脚本处处理后,把把结果发送送给视点节节点vieew2: DEFF touuchSccriptt Scrript evventIIn SFFBooll touuchBooxIsAActivve 入口evventOOut SSFB
38、oool biindViiew2 出口urrljaavesccriptt: 脚本ffuncttion toucchBoxxIsAcctivee(acttive) 与入入口同名的的函数被调调用binddVieww2= TTRUE; 返回到到出口 关于这个SScrippt节点,请请注意一下下几点:(1)它它的事件入入口touuchBooxIsAActivve和事件件出口biindViiew2是是自定义的的,其它VVRML节节点的域和和事件都是是固定的。(2)这这里定义的的事件入口口toucchBoxxIsAcctivee(即入事事件)和事事件出口bbindVView22(即出事事件)的类类型都是S
39、SFBoool(单值值布尔型),它们与与toucchBoxx的事件出出口isAActivve和viiew2的的事件入口口set_bindd的类型保保持一致。(3)“url”是脚本节节点的一个个域,可以以直接包含含脚本,也也可以包含含一个或多多个用URRL地址指指示的脚本本,若有多多个地址,则则按照先后后次序获取取第一个可可得到的脚脚本。(4)脚脚本是以函函数(fuunctiion)的的形式给出出的,函数数名touuchBooxIsAActivve 与事事件入口的的名称相同同,这是和和ECMAAScriipt语言言的接口约约定,表示示相应事件件入口收到到事件后调调用此函数数进行处理理。5.事件流
40、流程与小结结 下面我我们整理一一下事件流流程: (1)用用户在方块块上按下鼠鼠标左键。 (2)接接触检测器器发出一个个“TRUUE”事件件。 (3)此此事件进入入脚本节点点toucchScrript的的事件入口口toucchBoxxIsAcctivee. (4)调调用脚本函函数touuchBooxIsAActivve(注意意函数并没没有判断入入事件的值值)。 (5)函函数向toouchSScrippt的事件件出口biindViiew2发发送一个“TRUEE”事件(还还可以进行行其它判断断或执行其其它事件)。 (6)vview22节点收到到“TRUUE”事件件,成为当当前视点。按照VRRML约定
41、定,“认为为”上述事事件是同时时发生的,也也就是这些些事件的时时间戳相同同。 (7)若若用户松开开鼠标左键键,则接触触检测器发发出一个“FALSSE”事件件,此事件件同样引起起脚本函数数调用并发发送“TRRUE”事事件,所以以vieww2仍然保保持为当前前视点。 本节的完整整代码是: #VRRML VV2.0 utf88 DEEF viiew1 Viewwpoinnt pposittion 0 0 20 ddescrriptiion vieww1 DEEF viiew2 Viewwpoinnt pposittion 5 0 20 ddescrriptiion vieww2 Grroup cch
42、ilddren DEF box Trannsforrm traanslaationn 5 00 0 chiildreen Shhape aappeaarancce Apppearrancee mateeriall Matteriaal difffuseeColoor 1 0 0 ggeomeetry Box DEEF toouchBBox TTouchhSenssor DEF spheere TTranssformm traanslaationn 0 00 0 chiildreen Shhape aappeaarancce Apppearrancee mateeriall Matteriaal
43、 difffuseeColoor 0 1 0 ggeomeetry Spheere DEFF conne Trranfoorm trransaaltioon -55 0 00 chhildrren SShapee appeearannce AAppeaarancce matteriaal Maateriial diiffusseCollor 00 0 11 geommetryy Conne #end of GGroupp chiildreen DDEF ttouchhScriipt SScrippt evenntIn SFBoool ttouchhBoxIIsActtive evenntOut
44、t SFBBool binddVieww2 url javvascrript : funnctioon toouchBBoxIssActiive (actiive) biindViiew2 = TRRUE; RROUTEE touuchBoox.issActiive TTO toouchSScrippt.toouchBBoxIssActiive RROUTEE touuchSccriptt.binndVieew2 TTO viiew2.set_bindd这里所建建立的虚拟拟境界并不不复杂,但但涉及到了了VRMLL2.0最最基础性的的功能和概概念:利用用检测器产产生事件、利用路由由传递事件件以及
45、利用用脚本编写写自定义行行为,掌握握了这些内内容也就掌掌握了VRRML2.0的核心心。在后面面的几节中中,我们将将探索一些些专题性的的有趣功能能,而本节节是基础,因因而必须透透彻理解。 (六)进一一步的完善善与修饰1.邻近传传感器当用户进入入或离开邻邻近检测器器所划定的的区域时就就会触发它它。正如你你在标准中中可以查到到的那样,PProxiimityySenssor节点点定义为:ProxiimityySenssor exxposeedFieeld SSFVecc3f ceenterr 0 00 0 exxposeedFieeld SSFVecc3f siize 00 0 00 exxposee
46、dFieeld SSFBoool ennableed TRRUE evventOOut SSFBoool issActiive evventOOut SSFVecc3f poositiion_cchangged evventOOut SSFRottatioon orrienttatioon_chhangeed evventOOut SSFTimme ennterTTime evventOOut SSFTimme exxitTiime ProxiimityySenssor节点点共有三个个外露域(eexpossedFiield)和五个出出事件(eeventtOut).出事件我我们已经熟熟悉,是节节
47、点状态发发生改变时时用来通知知其它节点点的,这里里的出事件件isAcctivee 用于PProxiimityySenssor通报报自己已被被激活。eenterrTimee和exiitTimme通报用用户(代表表用户的用用户化身或或指示器)进进入和退出出ProxximittySennsor检检测区的时时刻。若用用户已在检检测器之内内,则当用用户的位置置或方位发发生变化时时,送出pposittion_channged和和orieentattion_channged出出事件。这这五个出事事件联合起起来,就定定义了邻近近检测器的的功能。外外露域则集集域(Fiield)、入事件(eeventtIn)和和
48、出事件(eeventtOut)三三者的功能能于一身,也也就是说,它它既象域一一样描述了了节点的当当前状态,又又可以作为为入事件由由其它节点点修改这种种状态,并并作为出事事件把这种种改变通知知其它节点点。这里的的enabbled外外露域是布布尔型的,用用于ProoximiitySeensorr的启用和和停用,ccenteer和siize定义义形为长方方体的邻近近检测区。我们要要在方块、球体和圆圆柱这三个个物体构成成的静态世世界,现在在在球体周周围增加一一个邻近检检测区:DEF sspherre Trransfform ttransslatiion 00 0 00 cchilddren Shapp
49、e . DEF comeeClosse PrroximmitySSensoor cennter 0 0 0 sizze 4 4 4 ProxiimityySenssor的名名字为coomeClloserr,邻近区区的中心和和球体的球球心重合,形形状为正方方体,边长长为4米,是球球体直径的的两倍。当当用户走进进球体时就就会触发这这个邻近检检测器,检检测器发出出isAcctivee事件,我我们把这个个事件出口口通过路由由指向Sccriptt节点(用用来绑定视视点2):DEF ccomeCCloseerScrript Scriipt evventIIn SFFBooll entterPrroximm
50、itySSensoorIsAActivve evventOOut SSFBoool biindViiew2 urrl javaascriipt : ffuncttion enteerProoximiitySeensorrIsAcctivee (acctivee) binddVieww2=TRRUE; 随后,我们们在邻近检检测器的出出事件issActiive和脚脚本节点ccomeCCloseerScrript的的入事件eenterrProxximittySennsorIIsActtive之之间建立路路由,后者者收到事件件后执行函函数entterPrroximmitySSensrroIsAActi
51、vve,函数数发出biindViiew2出出事件,这这个出事件件通过路由由连接到视视点节点VView22:ROUTEE commeClooser.isAcctivee TO comeeClosserSccriptt.entterPrroximmitySSensoorIsAActivve ROUUTE ccomeCCloseerScrript.binddVieww2 TOO vieew2.sset_bbind 也就是说,一一旦用户进进入邻近区区,境界的的当前视点点将转换成成Vieww2.这个个由两个视视点、三个个物体、一一个邻近检检测器和一一个脚本节节点组成的的境界的完完整代码如如下:#VRML
52、L V2.0 uttf8 DEFF vieew1 VViewppointt poositiion 00 0 220 deescriiptioon vview11 DEFF vieew2 VViewppointt poositiion 00 0 220 deescriiptioon vview22 Grooup chhildrren DDEF bbox TTranssformm trannslattion 5 0 0 chilldrenn Shaape apppearrancee Apppearaance mmaterrial Mateeriall difffuseCColorr 1 00 0
53、geeomettry BBox DDEF sspherre Trransfform trannslattion 0 0 0 chilldrenn Shaape apppearrancee Apppearaance mmaterrial Mateeriall difffuseCColorr 0 11 0 geeomettry SSpherre DEFF commeClooser ProxximittrySeensorr ceenterr 0 00 0 siize 44 4 44 DDEF ccone Trannsforrm trannslattion -5 00 0 chilldrenn Sha
54、ape apppearrancee Apppearaance mmaterrial Mateeriall difffuseCColorr 0 00 1 geeomettry CCone #endd of Grouup chhildrren DEFF commeClooserSScrippt Sccriptt evventIIn SFFBooll entterPrroximmitySSensoorIsAActivve evventOOut SSFBoool biindViiew2 urrl jjavasscrippt : ffuncttion enteerProoximiitySeensorrI
55、sAcctivee(acttive) binddVieww2=TRRUE; ROUUTE ccomeCCloseer.issActiive TTO coomeClloserrScriipt.eenterrProxximittySennsorIIsActtive ROUUTE ccomeCCloseerScrript.binddVieww2 TOO vieew2.sset_bbind 启动VRMML浏览器器进入境界界,面向球球体一直走走过去,当当你刚刚感感到靠近球球体时,会会突然感到到自己后退退了一大步步(或者说说物体跳到到前方更远远的地方),这这表明邻近近检测器已已经检测到到你的靠近近,它把这
56、这件事通知知脚本节点点,脚本节节点把视点点Vieww2绑定成成当前视点点,从而使使你感到视视点突然改改变。再稍稍修改改一下邻近近检测器,把把它的中心心位置向右右移了2米米: DEFF commeClooser ProxximittySennsor ceenterr 2 00 0 siize 44 4 44 这样你你就可以从从左边(方方块那一边边)走进球球体(视点点不跳),但但不能从右右边(圆锥锥那一边)走走近它(视视点跳转)。 总之,PProxiimityySenssor能够够检测用户户是否进入入或离开检检测器指定定的空间区区域,典型型用法是当当用户走进进房间时开开启灯光,当当用户离开开时关闭
57、灯灯光,从而而建立功能能丰富的“智能”空空间。2.连续动动画我们已经使使用过接触触检测器,当当我们把鼠鼠标指针放放到方块(这这个几何节节点包含接接触检测器器)上面时时,指针形形状发生变变化,这意意味着我们们已经进入入检测区,如如果按下鼠鼠标左钮,则则按照我们们的定义,当当前视点会会发生变化化。 这一节节仍然制作作这样一个个对接触有有反应的方方块,只是是接触后它它会连续不不断地转动动,动画行行为可以用用时间检测测器(TiimeSeensorr)驱动,而而不断变化化的旋转值值可用脚本本节点或朝朝向插补器器(oriientaationnInteerpollatorr)给出。接触传感感器作为开始的的基
58、本代码码是: #VRRML VV2.0 utf88 DDEF ccube Trannsforrm rootatiion 11 1 11 0 chhildrren Shaape apppearrancee Apppearaance mateeriall Matteriaal ddiffuuseCoolor 1 0 0 geommetryy Boxx DDEF TTouchhS ToouchSSensoor DEEF reevolvver SScrippt eeventtIn SSFBoool sttartRRevollvingg evenntOutt SFRRotattion revoolve
59、ffieldd SFFFloatt anggle 00 url javvascrript : fuunctiion sstarttRevoolvinng () revoolve0=11; rrevollve11=1; reevolvve2=1; revvolvee3=anglle; anglle+=00.1; ROUTTE ToouchSS.isOOver TO rrevollver.starrtRevvolviing ROUUTE rrevollver.revoolve TO ccube.set_rotaationn 其中,方块块cubee包含两个个子节点,前前者定义了了它的形态态(红色的的
60、单位立方方体),后后者把它定定义成接触触检测器。注意,ccube的的类型是TTranssformm节点,它它的rottatioon 域是是外露域,指指定本组相相对于上层层坐标系的的旋转值,这这里指定的的初始值是是“1 11 1 00 ”,其其中前三个个数值定义义旋转轴,最最后一个值值定义旋转转角。由于于它是外露露域,因而而可以通过过入事件(名名为sett_rottatioon)进行行修改,下下面定义的的动态行为为就是这样样实现的。Scrippt节点rrevollver的的核心是内内联的ECCMASccriptt脚本函数数。它给定定一个不断断变化的旋旋转值。当当鼠标指针针移动到方方块之上时时,接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年小型山体塌方应急处置科普课件
- 人工智能算法安全评估
- 2026年秋季高中新生军训 军训中的成长与蜕变教学方案
- 2026年秋季初中军训:超越自我成长第一课
- 2026年生成式AI训练师露营行业应用:营地介绍生成训练
- 2026年安徽现代信息工程职业学院单招职业技能考试题库附参考答案详解(完整版)
- 2024年陕西宝鸡渭滨职业学院高职单招职业适应性测试考试题库及完整答案详解(名校卷)
- 2026年四川工业科技学院专科单招综合素质考试题库及参考答案详解【巩固】
- 2025年德州现代汽车学院单招综合素质考试模拟试卷带答案详解(考试直接用)
- 2024年汉中技师学院汉台高职部高职单招职业技能考试模拟试卷审定版附答案详解
- 逆向退货管理办法
- 农村儿童手机依赖问题小组干预策略研究
- 防灾避难场所设计规范
- 口服给药操作技能
- 江苏省房屋建筑工程施工图联合审查技术要点
- DL∕T 5097-2014 火力发电厂贮灰场岩土工程勘测技术规程
- 照明与健康人因工程学研究
- 山东会展业发展研究
- 房屋装修简单合同
- 医院陪护感染知识培训课件
- 龙虎山正一日诵早晚课
评论
0/150
提交评论