閑闪互动多媒体-厦门网站建设者 >> 技术文献 >> 虚拟现实 >> X3D教程:创建新的节点—原型

X3D教程:创建新的节点—原型

发布: 2007-9-22 11:35 |  作者: webmaster |  来源: 本站原创 |  查看: 339次

什么是原型?

  X3D规范中虽然已经定义了上百个节点,但不可能满足所有应用的需求,因此提供了原型的机制让创作者能够定义新的节点。一个节点通常包含了数个字段以定义该节点的属性,参数化的改变节点的某些特性,当然,节点也可以不包含任何字段。

原型–定义新节点的语法

  首先,以ProtoDeclare宣告新节点的名称。ProtoDeclare中需依序包含ProtoInterface及ProtoBody,在ProtoInterface中列出该节点所有的字段(需注明字段的名称、资料型态、操作类型),在ProtoBody中以内建节点定义出新节点的功能。以下为两个节单的例子:

<ProtoDeclare name='NewWorldInfoNode'>
  <ProtoBody>
    <WorldInfo DEF='ExamplePrototypeBody'/>
  </ProtoBody>
</ProtoDeclare>

<ProtoDeclare name='EmissiveMaterial'> 
  <ProtoInterface> 
    <field name='onlyColor' type='MFColor' accessType='inputOutput'/> 
  </ProtoInterface> 
  <ProtoBody> 
    <!-- Override default diffuseColor value 0.8 0.8 0.8 --> 
    <Material diffuseColor='0 0 0'> 
      <!-- Connect emissiveColor field of current node to onlyColor field of parent ProtoDeclare. --> 
      <IS> 
        <connect nodeField='emissiveColor' protoField='onlyColor'/> 
      </IS> 
    </Material> 
  </ProtoBody> 
</ProtoDeclare>

  在ProtoBody中可以有若干个IS,IS中包含若干个connect,用来将ProtoBody中内建节点的字段对应到ProtoInterface中新节点的字段。例如上面第二个范例程序代码中,EmissiveMaterial这个新节点的onlyColor字段是表示Material节点中的emissiveColor字段。注意对应字段的资料型态与操作类型必须要一致。

  新节点中也可以定义子节点,例如:

<ProtoDeclare name='ShiftGroupUp2m'> 
  <ProtoInterface> 
    <field name='children' type='MFNode' accessType='inputOutput'> 
      <Group DEF='DefaultNodeValue' bboxSize='2 2 2'/> 
    </field> 
  </ProtoInterface> 
  <ProtoBody> 
    <Transform translation='0 2 0'> 
      <Group> 
        <IS> 
          <connect nodeField='children' protoField='children'/> 
        </IS> 
      </Group> 
    </Transform> 
  </ProtoBody> 
</ProtoDeclare>

  原型–使用新节点的语法

  如果新节点的的定义ProtoDeclare与使用新节点的语法在同一份X3D档案中的话,可以直接使用ProtoInstance使用新节点,以上面第二个程序代码为例:

<ProtoDeclare name="EmissiveMaterial"> 
  ...
</ProtoDeclare>

<ProtoInstance name="EmissiveMaterial">
  <fieldValue name="onlyColor" value="0.8 0.8 0.8"/>
</ProtoInstance>

  如果新节点的定义在其它X3D档案中,需先使用ExternProtoDeclare宣告新节点定义的档案位置、节点名称、字段等信息,再以ProtoInstance使用该节点。

<ExternProtoDeclare name="EmissiveMaterial" url="EmissiveMaterialPrototype.x3d#EmissiveMaterial"> 
  <field name='onlyColor' type='MFColor' accessType='inputOutput'/> 
</ProtoDeclare>

<ProtoInstance name="EmissiveMaterial">
  <fieldValue name="onlyColor" value="0.8 0.8 0.8"/>
</ProtoInstance>

  有关url的规定请参考Networking组件。
打印 | 收藏此页 |  Mail给朋友 | 举报
上一篇 下一篇
 

评分:0

发表评论
seccode 换一个
【已有0位网友发表了看法,点击查看全部评论