第六章 第四节 场景交互.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 第四节 场景交互

第四章 第四节 场景交互 ??? VRML2.0相对VRML1.0的重大改进在于它能够支持动态的、交互式的3D场景。利用VRML2.0建立的场景,不仅可以展示其中运动的物体,而且还可以使用户跟这些物体进行交互。例如在某个场景中,门可开着,电梯在运行,出租车行驶着,更奇妙的是,用户可以将门打开或关上,选择电梯的上下按钮,或者招手叫出租车停下来。 ??? VRML2.0采用了事件机制来支持这种动态交互的场景。事件是包含一些数据的信息,它被用来作为事件的触发器(Sensor)。事件机制在Windows操作系统中也是普遍使用的,如键盘或鼠标的每次击键操作都会产生一个输入事件并被送到当前的应用程序中去。在VRML2.0中,每个事件包括两个部分:来源(eventIn)和目标(eventOut),它们都是由某个节点的字段表示的。 ??? VRML2.0提供了一组描述事件触发器的节点。如TouchSensor用于描述用户输入的消息;TimeSensor用于产生定时器消息;ProximitySensor用于相应用户进入某个区域的消息;VisibilitySensor用于判断某个包围盒(Box)区域的可见性等等。 ??? 下面是一个处理用户输入(即鼠标消息)的例子。当用户在立方体上按下左(右)键时,视点进行一次切换。 程序例 touchme.wrl #VRML V2.0 utf8 DEF view1 Viewpoint { position 0 0 20 description view1 } DEF view2 Viewpoint { position 5 0 20 description view2 } Group { children [ DEF box Transform { translation 5 0 0 children [ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Box { } } DEF touchBox TouchSensor { } ] } DEF sphere Transform { translation 0 0 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Sphere { } } ] } DEF cone Transform { translation -5 0 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cone { } } ] } ] # end of Group children } DEF touchScript Script { eventIn SFBool touchBoxIsActive eventOut SFBool bindView2   url vrmlscript: function touchBoxIsActive(active) { bindView2 = TRUE; } } ROUTE touchBox.isActive TO touchScript.touchBoxIsActive ROUTE touchScript.bindView2 TO view2.set_bind   图5-2-8 视点view1的场景   图5-2-9 视点view2的场景 ??? 在上述程序的开头,定义了两个视点(Viewpoint)节点。Viewpoint节点的各字段定义如下: Viewpoint { eventIn SFBool set_bind exposedField SFFloat fieldOfView 0.785398 exposedField SFBool jump TRUE exposedField SFRotation orientation 0 0 1 0 exposedField SFVec3f position 0 0 10 field SFString description eventOut SFTime bindTime eventOut SFBool isBound } ??? VRML允许在同一个.wrl文件中设置多个视点节点。浏览器在解释时,将这些视点节点归入一个栈结构,栈顶的视点节点就是当前的视点。可以通过调用视点节点的set_bind字段将某个视点节点置为栈顶元素,也即设为当前的视点。 ??? 接下来,程序在box形体后插入一个To

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档