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

    来源:第三维度

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

    第五节:动态修改场景图

    场景图是描述境界结构的基本概念,节点是构成场景图的基本单元。组节点是能够包含字节点的节点,组节点本身还可作为其它组节点的子节点,从而形成层次性体系结构。VRML中的组节点包含Anchor(锚)、 Billboard(布告牌)、 Collision(碰撞)、Group (组)、Inline (内联)、LOD(细节层次)、 Switch(开关)、Transform(变换)共八种,除Inline、LOD、Switch这几个具有特殊功能外,它们都定义了入事件addChildren 和removeChildren ,前者用于向组节点的子节点域children 中增加新的子节点,后者用于从中删除子节点,这样就可以动态修改场景图的结构。

    下面是我们这一节要建立的境界,开始的时候球体位于左边红色方块的内部,在按动底部的绿色方块后,球体进入右边蓝色方块之内。

    首先定义三个方块:

    #VRML V2.0 utf8

    Viewpoint { position 0 0 15 }

    DEF leftBox Transform {

    translation -5 0 0

    children [

    Shape {

    appearance Appearance {

    material Material { diffuseColor 1 0 0 }

    }

    geometry Box {}

    }

    ]

    }

    DEF rightBox Transform {

    translation 5 0 0

    children [

    Shape {

    appearance Appearance {

    material Material { diffuseColor 0 0 1 }

    }

    geometry Box {}

    }

    ]

    }

    DEF onoff Transform {

    translation 0 -5 0

    children [

    Shape {

    appearance Appearance {

    material Material { diffuseColor 0 1 0 }

    }

    geometry Box {}

    }

    ]

    }

    其中左边的方块为红色,右边的方块为蓝色,下边的方块为绿色,都是Transform类型,三者都位于场景图的最高层,都是场景图的根节点,都包含一个Box几何体作为子节点。下面为红方块增加一个球体子节点:

    DEF leftBox Transform {

    translation -5 0 0

    children [

    Shape {

    appearance Appearance {

    material Material { diffuseColor 1 0 0 }

    }

    geometry Box {}

    }

    DEF SphereChild Shape {

    appearance Appearance {

    material Material { diffuseColor 1 0 1 }

    }

    geometry Sphere { radius 1.2 }

    }

    ]

    }

    为了以后引用方便,这里还为球体子节点起了名字:SphereChild .为了让用户能够增删这个儿子,把绿方块定义成接触检测器:

    DEF onoff Transform {

    translation 0 -5 0

    children [

    Shape {

    appearance Appearance {

    material Material {diffuseColor 0 1 0 }

    }

    geometry Box {}

    }

    DEF TS TouchSensor {}

    ]

    }

    子节点增删的具体任务由Script节点来完成:

    DEF S Script {

    eventIn SFBool isActive

    eventOut MFNode child

    field MFNode testNode USE SphereChild

    url"javascript :

    function isActive (value) {

    if (value)child = testNode;

    }"

    }

    注意它的出事件child的类型是MFNode,也就是说通过这个事件送出的是节点。节点S的testNode域是对球体SphereChild引用(USE语句),引用不复制该节点,而是把同一节点再次插入场景图,从而导致SphereChild拥有多个父亲,所以场景图仅仅是层次结构,而不是树形结构。加上下面的路由语句,建立事件联系:

    ROUTE TS.isActive TO S.isActive

    ROUTE S.child TO leftBox.removeChildren

    ROUTE S.child TO rightBox.addChildren

    接触检测器TS的激活事件isActive连接到脚本节点S的isActive,这样用户一旦按动绿方块,就会启动脚本节点的事件处理函数isActive(),此函数把testNode节点(即球体节点SphereChild )送至出事件S.child.根据路由,左边红方块的事件入口leftBox.removeChildren 收到此事件,按照removeChildren的语义,球体节点SphereChild从leftBox的子节点列表中删除。与此同时,右边蓝方块的事件入口rightBox.addChildren也收到S.child出事件,根据addChildren的语义,球体节点SphereChild加入 rightBox的子节点列表。通过这个过程,球体节点SphereChild的父节点从leftBox更换成rightBox.

标签: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
扫一扫 第三维度
官方微信号