我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>培训教程

VRML2.0教程3:组织场景中的对象

文章来源:第三维度 作者: 发布时间:2012年04月10日 点击数: 字号:

    来源:第三维度
    作者:施寅,周葆芳,赵志勇

    选自《VRML2.0使用速成》第四章第二节

     组织场景中的对象

    当你不断地往场景中添加对象时, 可能会想到把相关的一些对象组合在一起。比如,场景中有一些小物体共同组成了一个大的物体, 在做移动或别的变换时它们都是一起进行的, 这样就应该把它们放在同一个Transform 组节点中。下面是一个包含两个组节点的简单VRML 文件。

    [例1 ] 组节点。

    # VRML V2 .0 utf8 Viewpoint { position 0 5 10 }
    Transform {
    translation 0 5 0 rotation 1 0 0 .8
    children [
        Inline {
        url "brazier .wrl" bboxCenter 0 0 0
        bboxSize 3 .14 3 .13 3 .12
        },
        Transform {
        translation 0 1 .5 0
        children [
            Inline {
            url "coals .wrl"
            bboxCenter - .15 - .19 .135 bboxSize .84 .46 .61
            }
        ]
        }
    ]
    }

    为了有较好的可读性, 子节点都采用缩进格式列出, 这样就很容易看出左边的父节点与进行了缩进的子节点间的层次关系。计算机将忽略这些空白。实际上, 有的服务器在传输用户所请求的VRML 文件时会自动删掉不必要的空白字符。但对于人来说, 保留空白是很有好处的。图1显示的是描述火盆的场景框图。

VRML2.0教程3:组织场景中的对象
图1 分组层次结构的场景框图

    1 . 作用范围

    Transform 节点对包含它内部的所有节点都会产生影响。如果一个Transform 节点包含了一个Transform 节点, 那么它们是一种嵌套关系, 父节点将对其所有的子、孙节点都产生作用。基本规则是: Transform 节点的变换域指定的变换将作用于其大括号内的所有对象, 一旦走出大括号外, 它的影响也就没有了。

    图2 是一个用嵌套框来表示Transform 节点作用范围的VRML 文件的示意图。每个Transform 节点仅其本框内的其它节点产生影响。

VRML2.0教程3:组织场景中的对象
图2Transform 节点的范围

    2 . 变换的累加

    当Transform 节点互相嵌套时, 它们的变换会产生累加效果。在图4.7 中coals ( 木炭) 既被Tronsform1 的变换又被Tronsform2 的变换施加作用, 而brazier ( 火盆) 则只受Tronsform1 的变换的影响。

    各个变换的作用顺序是很重要的。要看到嵌套变换的效果, 你首先用到的是物体自己的变换节点, 这个变换把你置身于物体的局部坐标系中。接下来如果这个物体有父节点, 就让父节点的变换产生作用。如果这个父节点还有自己的父节点就再使用其变换节点, 以此类推, 直到让最外层父节点的变换节点对此物体产生了作用为止。至此, 这个从物体的变换开始, 包括所有父节点的累加结果( 从数学上讲, 就是一系列变换矩阵的连乘结果) , 这样就让你进入了这个物体所在的世界坐标系。在前面的例子中, coals( 木炭) 的世界坐标系是Transform2 和Transform1 累加的结果。

    应当注意的是, 同一层次上的变换节点( 按我们的分类方法, 它们是兄弟关系) 互相并不产生影响, 兄弟变换节点形成的是堆积式作用框而不是嵌套式作用框。

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料