首页|行业资讯|企业名录|周边产品|数字城市|增强现实|工业仿真|解决方案|虚拟医疗|行业仿真|图形处理|军事战场
资讯首页
行业资讯 >> 学习教程>>正文
三维网页VRML入门教程第三节:邻近检测器
2010年9月14日    评论:    分享:

    来源:第三维度

    第一节:Hello,World
    第二节:增加交互能力
    第三节:邻近检测器
    第四节:连续动画
    第五节:动态修改场景图
    第六节:扩充节点类型
    第七节:结束语

    VRML是“Virtual Reality Modeling Language”的缩写形式,意思是“虚拟现实造型语言”。

    第三节 邻近检测器

    本节内容主要讨论邻近检测器(proximitySensor),当用户进入或离开邻近检测器所划定的区域时就会触发它。正如你在标准中可以查到的那样,ProximitySensor节点定义为:

    ProximitySensor {

    exposedField SFVec3f center 0 0 0

    exposedField SFVec3f size 0 0 0

    exposedField SFBool enabled TRUE

    eventOut SFBool isActive

    eventOut SFVec3f position_changed

    eventOut SFRotation orientation_changed

    eventOut SFTime enterTime

    eventOut SFTime exitTime

    }

    这里稍作介绍。ProximitySensor节点共有三个外露域(exposedField)和五个出事件(eventOut).出事件我们已经熟悉,是节点状态发生改变时用来通知其它节点的,这里的出事件isActive 用于ProximitySensor通报自己已被激活。enterTime和exitTime通报用户(代表用户的用户化身或指示器)进入和退出ProximitySensor检测区的时刻。若用户已在检测器之内,则当用户的位置或方位发生变化时,送出position_changed和orientation_changed出事件这五个出事件联合起来,就定义了邻近检测器的功能。外露域则集域(Field)、入事件(eventIn)和出事件(eventOut)三者的功能于一身,也就是说,它既象域一样描述了节点的当前状态,又可以作为入事件由其它节点修改这种状态,并作为出事件把这种改变通知其它节点。这里的enabled外露域是布尔型的,用于ProximitySensor的启用和停用,center和size定义形为长方体的邻近检测区。

    我们的出发点是第一节中建造的境界helloworld,它是由方块、球体和圆柱这三个物体构成的静态世界,现在在球体周围增加一个邻近检测区:

    DEF sphere Transform {

    translation 0 0 0

    children [

    Shape {....}

    DEF comeClose ProximitySensor {

    center 0 0 0

    size 4 4 4

    }

    ]

    }

    ProximitySensor的名字为comeCloser,邻近区的中心和球体的球心重合,形状为正方体,边长为4米,是球体直径的两倍。当用户走进球体时就会触发这个邻近检测器,检测器发出isActive事件,我们把这个事件出口通过路由指向Script节点(用来绑定视点2):

    DEF comeCloserScript Script {

    eventIn SFBool enterProximitySensorIsActive

    eventOut SFBool bindView2

    url " javascript :

    function enterProximitySensorIsActive (active) {

    bindView2=TRUE;

    } "

    }

    随后,我们在邻近检测器的出事件isActive和脚本节点comeCloserScript的入事件enterProximitySensorIsActive之间建立路由,后者收到事件后执行函数enterProximitySensroIsActive,函数发出bindView2出事件,这个出事件通过路由连接到视点节点View2:

    ROUTE comeCloser.isActive TO comeCloserScript.enterProximitySensorIsActive

    ROUTE comeCloserScript.bindView2 TO view2.set_bind

    也就是说,一旦用户进入邻近区,境界的当前视点将转换成View2.这个由两个视点、三个物体、一个邻近检测器和一个脚本节点组成的境界的完整代码如下:

    #VRML V2.0 utf8

    DEF view1 Viewpoint {

    position 0 0 20

    description "view1"

    }

    DEF view2 Viewpoint {

    position 0 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 sphere Transform {

    translation 0 0 0

    children [

    Shape {

    appearance Appearance {

    material Material { diffuseColor 0 1 0 }

    }

    geometry Sphere {}

    }

    DEF comeCloser ProximitrySensor {

    center 0 0 0

    size 4 4 4

    }

    ]

    }

    DEF cone Transform {

    translation -5 0 0

    children [

    Shape {

    appearance Appearance {

    material Material { diffuseColor 0 0 1}

    }

    geometry Cone {}

    }

    ]

    }

    ]#end of Group children

    }

    DEF comeCloserScript Script {

    eventIn SFBool enterProximitySensorIsActive

    eventOut SFBool bindView2

    url "javascript :

    function enterProximitySensorIsActive(active) {
   
    bindView2=TRUE;

    }"

    }

    ROUTE comeCloser.isActive TO comeCloserScript.enterProximitySensorIsActive

    ROUTE comeCloserScript.bindView2 TO view2.set_bind

    启动VRML浏览器进入境界,面向球体一直走过去,当你刚刚感到*近球体时,会突然感到自己后退了一大步(或者说物体跳到前方更远的地方),这表明邻近检测器已经检测到你的*近,它把这件事通知脚本节点,脚本节点把视点View2绑定成当前视点,从而使你感到视点突然改变。

    再稍稍修改一下邻近检测器,把它的中心位置向右移了2米:

    DEF comeCloser ProximitySensor {

    center 2 0 0

    size 4 4 4

    }

    这样你就可以从左边(方块那一边)走进球体(视点不跳),但不能从右边(圆锥那一边)走近它(视点跳转)。

    总之,ProximitySensor能够检测用户是否进入或离开检测器指定的空间区域,典型用法是当用户走进房间时开启灯光,当用户离开时关闭灯光,从而建立功能丰富的“智能”空间。

标签:VRML
上一篇:三维网页VRML入门教程第二节:增加交互能力
下一篇:三维网页VRML入门教程第四节:连续动画
网友评论:三维网页VRML入门教程第三节:邻近检测器
评论
留名: 验证码:
您可能还需要关注一下内容:
·基于VRML与Java3D的交互式虚拟物流仿真系统
·VRML2.0教程7:不规则几何节点
·VRML2.0教程6:简单几何节点
·VRML2.0教程5:变换节点
·基于VRML—JAVA的机器人运动仿真研究
·基于VRML的虚拟园林设计要素构建
·基于VRML的虚拟综合布线系统
·VRML2.0教程4:观察场景
·VRML2.0教程3:组织场景中的对象
·VRML2.0教程2:内联节点使用外部资源
☏ 推荐产品

Ladybug5全景
商家:力方国际

ProJet®
商家:力方国际

ProJet®
商家:视科创新

Premium1.5
商家:视科创新

巴可HDX主动立体投
商家:德浩科视

巴可HDF-W26投
商家:德浩科视

巴可30000流明2
商家:德浩科视

巴可4万流明2K投影
商家:德浩科视
☞ 外设导航
☏ 企业名录
【广州】中科院广州电子技术有限公司
【北京】第二空间(北京)科技有限公司
【北京】幻维世界(北京)网络科技有限公司
【厦门】厦门惠拓动漫科技有限公司
【厦门】厦门幻眼信息科技有限公司
【深圳】深圳南方百捷文化传播有限公司
【北京】北京思源科安信息技术有限公司
【上海】上海殊未信息科技有限公司
【北京】北京赢康科技开发有限公司
【武汉】武汉科码软件有限公司
友情链接 关于本站 咨询策划 行业推广 广告服务 免责声明 网站建设 联系我们 融资计划
北京第三维度科技有限公司 版权所有 京ICP备09001338
2008-2016 Beijing The third dimension Inc. All Rights Reserved.
Tel:010-57255801 Mob:13371637112(24小时)
Email:d3dweb@163.com  QQ:496466882
扫一扫 第三维度
官方微信号