2023年-虚拟现实技术―VRML篇.docx
《2023年-虚拟现实技术―VRML篇.docx》由会员分享,可在线阅读,更多相关《2023年-虚拟现实技术―VRML篇.docx(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、虚拟现实技术一 一VRML篇一、VRML介绍1 .什么是VRML?VRML 是“Virtual Reality Modeling Languagev的缩写形式,意思是“虚 拟现实造型语言”。第一代Web是以HTML为核心的二维浏览技术,受HTML语言的局限性,VRML 之前的网页只能是简单的平面结构,而且实现环境与参与者的动态交互是非常烦 琐的。第二代Web是以VRML为核心的三维浏览技术。第二代Web把VRML与HTML、 Java,媒体信息流等技术有机地结合起来,形成一种新的三维超媒体Web。VRML是用来描述三维物体及其行为的,可以构建虚拟境界(Virtural World), 可以集成
2、文本、图像、音响、MPEG影像等多种媒体类型,还可以内嵌用Java、 ECMAScript等语言编写的程序代码。以VRML为核心构建的虚拟世界中用户如身处真实世界,可以和虚拟物体交 互,人们可以以习惯的自然方式访问各种场所,在虚拟社区中“直接”交谈和交 往。事实上,目前采用VRML技术取得成功的案例已经很多,例如探路者到达火 星后的信息就是利用VR应在因特网上即时发布的,网络用户可以以三维方式随 探路者探索火星。2 . VRML的工作原理VRML定义了一种把3D图形和多媒体集成在一起的文件格式。从语法角度看, VRML文件是显式地定义和组织起来的3D多媒体对象集合;从语义角度看,VRML 文件
3、描述的是基于时间的交互式3D多媒体信息的抽象功能行为。VRML文件描述 的基于时间的3D空间称为虚拟境界(Virtual World),简称境界,所包含的图形 对象和听觉对象可通过多种机制动态修改。VRML文件可以包含对其他标准格式文件的引用。可以把JPEG、PNG和MPEG 文件用于对象纹理映射,把WAV和MIDI文件用于在境界中播放的声音。另外, 还可以引用包含Java或ECMAScript代码的文件,从而实现对象的编程行为。VRML使用场景图(Scene Graph)数据结构来建立3D实境,VRML的场景图 是一种代表所有3D世界静态特征的节点等级:几何关系、质材、纹理、几何转 换、光线
4、、视点以及嵌套结构。几乎所有生产厂商,无论是CAD、建模、动画、 VR,还是VRML,他们的结构核心都有场景图。境界中的对象及其属性用节点(Node)描述,节点按照一定规则构成场景图 (Scene Graph),也就是说,场景图是境界的内部表示。场景图中的第一类节点 用于从视觉和听觉角度表现对象,它们按照层次体系组织起来,反映了境界的空 间结构。另一类节点参与事件产生和路由机制,形成路由图(Route Graph),确 定境界随时间的推移如何动态变化。VRML文件的解释、执行和呈现通过浏览器实现,这与利用浏览器显示HTML 文件的机制完全相同。浏览器把场景图中的形态和声音呈现给用户,这种视听觉
5、 呈现即所谓的虚拟世界(境界)o用户通过浏览器获得的视听觉效果如同从某个特 定方位体验到的,境界中的这种位置和朝向称为取景器(Viewer)。3 . VRML的应用VRML在电子商务、教育、工程技术、建筑、娱乐、艺术等领域有广泛的应 用。例如在教育上,VRML不仅仅是HTML功能更强的替代品,其潜在意义在于突 破上述基于WWW的教学模型建立更自然、更真实的虚拟教育环境。在这种环境中geometry Sphere )DEF cone Transform translation -500 children Shape appearance Appearance material Material
6、diffuseColor 001)geometry Cone )#end of Group childrenROUTE touchBox. isActive TO view2. set_bind #传递把这个文件调入浏览器,然后把鼠标指向方块并按下左钮(先别松开!),可 以看到视点已经变为view2,内部的机制我们已经很清楚:左钮按下时方块节点 的接触检测器被触发,接着接触检测器从事件出口 isActive送出一个事件 “TRUE”,这个事件通过路由进入视点节点view2的事件入口 set_bind, view2 收到“TRUE”后成为当前视点,所以在我们眼前场景发生了变化。当松开鼠标左键,又
7、回到原来的视点,称为视点回跳。因为松开鼠标左键后, 接触传感器向view2发送了 “FALSE”事件,这样view2的当前地位被解除。若 不想回跳,则要自己来定义。4 .利用脚本编写自定义行为在VRML中,利用Script节点(脚本节点)定义用户自定义行为,所谓定义 即用脚本描述语言(Scripting Language)编写脚本的过程。VRML97支持的脚 本描述语言目前有两种:Java和EMCAScript (这是JavaScript标准化后的名称), 关于这两种语言本身,请参考相应参考书,VRML97标准中定义了它们和VRML的 接口方法。应提请注意的是:VRML是基于节点的语言,所以脚
8、本也是封装在 Script这个特殊节点中的。这里我们不过多讨论脚本描述语言的细节,主要讨 论把脚本集成到VRML文件中的方法。上面我们曾把接触检测器touchBox和视点view2直接通过路径连接起来, 现在要定义我们指定的行为,就需要在二者之间插入一个脚本节点,也就是让路 径绕个弯:ROUTE touchBox. isActive TO touchScript. touchBoxIsActiveROUTE touchScript. bindView2 TO view2. set_bind其中的脚本节点touchScript有一个事件人口 touchBoxIsActive和一个事 件出口 bi
9、nd_View2,前者接收来自接触检测器touchBox的事件,然后经自己的 脚本处理后,把结果发送给视点节点view2:DEF touchScript Script eventin SFBool touchBoxIsActive #入口eventOut SFBool bindView2# 出口url,z javescript:#脚本function touchBoxIsActive(active) #与入口同名的函数被调用bindView2= TRUE;# 返回到出口关于这个Script节点,请注意一下几点:(1)它的事件入口 touchBoxIsActive和事件出口 bindView2是
10、自定义的, 其它VRML节点的域和事件都是固定的。(2 )这里定义的事件入口 touchBoxIsActive (即入事件)和事件出口 bindView2(即出事件)的类型都是SFBool (单值布尔型),它们与touchBox的事 件出口 isActive和view2的事件入口 set_bind的类型保持一致。(3) “url”是脚本节点的一个域,/以直接包含脚本,也可以包含一个或 多个用URL地址指示的脚本,若有多个地址,则按照先后次序获取第一个可得到 的脚本。(4)脚本是以函数(function)的形式给出的,函数名touchBoxIsActive 与事件入口的名称相同,这是和ECMAS
11、cript语言的接口约定,表示相应事件入 口收到事件后调用此函数进行处理。5.事件流程与小结下面我们整理一下事件流程:(1)用户在方块上按下鼠标左键。(2)接触检测器发出一个“TRUE”事件。(3)此事件进入脚本节点touchScript的事件入口 touchBoxIsActive.(4)调用脚本函数touchBoxIsActive(注意函数并没有判断入事件的值)。(5)函数向touchScript的事件出口 bindView2发送一个TRUE”事件(还 可以进行其它判断或执行其它事件)。(6) view2节点收到“TRUE”事件,成为当前视点。按照VRML约定,“认 为”上述事件是同时发生的
12、,也就是这些事件的时间戳相同。(7)若用户松开鼠标左键,则接触检测器发出一个FALSE”事件,此事件 同样引起脚本函数调用并发送“TRUE”事件,所以view2仍然保持为当前视点。 本节的完整代码是:#VRML V2. 0 utf8DEF viewl Viewpoint position 0 0 20description viewlDEF view2 Viewpoint position 5 0 20description view2Group children DEF box Transform translation 500 children Shape appearance Appea
13、rance material Material diffuseColor 100 )geometry Box )DEF touchBox TouchSensor DEF sphere Transform translation 000 children Shape appearance Appearance material Material diffuseColor 010 )geometry Sphere )DEF cone Tranform transaltion -500 children Shape appearance Appearance material Material di
14、ffuseColor 001 )geometry Cone )I #end of Group childrenDEF touchScript Script eventin SFBool touchBoxIsActiveeventOut SFBool bindView2url z/javascript :function touchBoxIsActive (active) bindView2 = TRUE;ROUTE touchBox. isActive TO touchScript. touchBoxIsActiveROUTE touchScript. bindView2 TO view2.
15、set_bind这里所建立的虚拟境界并不复杂,但涉及到了 VRML2. 0最基础性的功能和概 念:利用检测器产生事件、利用路由传递事件以及利用脚本编写自定义行为,掌 握了这些内容也就掌握了 VRML2.0的核心。在后面的几节中,我们将探索一些专 题性的有趣功能,而本节是基础,因而必须透彻理解。(六)进一步的完善与修饰1 .邻近传感器当用户进入或离开邻近检测器所划定的区域时就会触发它。正如你在标准中可以查到的那样,ProximitySensor节点定义为:ProximitySensor exposedField SFVec3f center 000exposedField SFVec3f siz
16、e 000exposedField SFBool enabled TRUEeventOut SFBool isActiveeventOut SFVec3f position changedeventOut SFRotation orientation_changedeventOut SFTime enterTimeeventOut SFTime exitTimeProximitySensor节点共有三个外露域(exposedField)和五个出事件 (eventOut) .出事件我们已经熟悉,是节点状态发生改变时用来通知其它节点 的,这里的出事件isActive用于ProximitySenso
17、r通报自己已被激活。 enterTime和exitTime通报用户(代表用户的用户化身或指示器)进入和退出 ProximitySensor检测区的时刻。若用户已在检测器之内,则当用户的位置或方 位发生变化时,送出pos i t i onchanged和or i ent at i on changed出事件。这五 个出事件联合起来,就定义了邻近检测器的功能。外露域则集域(Field)、入事 件(eventin)和出事件(eventOut)三者的功能于一身,也就是说,它既象域 一样描述了节点的当前状态,又可以作为入事件由其它节点修改这种状态,并作 为出事件把这种改变通知其它节点。这里的enable
18、d外露域是布尔型的,用于 ProximitySensor的启用和停用,center和size定义形为长方体的邻近检测区。我们要在方块、球体和圆柱这三个物体构成的静态世界,现在在球体周围增 加一个邻近检测区:DEF sphere Transform translation 000 children ShapeDEF comeClose ProximitySensor center 000 size 444 )ProximitySensor的名字为comeCloser,邻近区的中心和球体的球心重合, 形状为正方体,边长为4米,是球体直径的两倍。当用户走进球体时就会触发这 个邻近检测器,检测器发出i
19、sActive事件,我们把这个事件出口通过路由指向 Script节点(用来绑定视点2):DEF comeCloserScript Script eventin SFBool enterProximitySensorlsActive eventOut SFBool bindView2 url javascript :function enterProximitySensorlsActive (active) bindView2=TRUE; )随后,我们在邻近检测器的出事件isActive和脚本节点comeCloserScript 的入事件enterProximitySensorlsActive之
20、间建立路由,后者收到事件后执行 函数enterProximitySensroIsActive,函数发出bindView2出事件,这个出事件 通过路由连接到视点节点View2:ROUTEcomeCloser. isActiveTOcomeCloserScript. enterProximitySensorlsActiveROUTE comeCloserScript. bindView2 TO view2. set bind也就是说,一旦用户进入邻近区,境界的当前视点麻转换成View2.这个由 两个视点、三个物体、一个邻近检测器和一个脚本节点组成的境界的完整代码如 下:#VRML V2. 0 ut
21、f8DEF viewl Viewpoint position 0 0 20 description viewl )DEF view2 Viewpoint position 0 0 20 description view2 )Group children DEF box Transform translation 500 children _Shape appearance Appearance material Material diffuseColor 100 )geometry Box DEF sphere Transform translation 000 children Shape
22、appearance Appearance material Material diffuseColor 010 )geometry Sphere DEF comeCloser ProximitrySensor center 000 size 444DEF cone Transform translation -500 children _Shape appearance Appearance material Material diffuseColor 001 )geometry Cone #end of Group childrenDEF comeCloserScript Script e
23、ventin SFBool enterProximitySensorlsActiveeventOut SFBool bindView2url javascript :function enterProximitySensorlsActive(active) bindView2=TRUE;ROUTEcomeCloser. isActiveTOcomeCloserScript. enterProximitySensorlsActiveROUTE comeCloserScript. bindView2 TO view2. set_bind启动VRML浏览器进入境界,面向球体一直走过去,当你刚刚感到靠
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 虚拟现实 技术 VRML
限制150内