VRML---第三章第三部分(原型定义和调用)

      原型:VRML为用户提供的自定义节点的功能,就是原型。设计者可以根据需要,利用原型创建一种新的节点类型,通过对节点类型实例化建立新节点,可以为节点添加各种域和事件。

   原型的基本概念

    通过域来修改新节点的属性。
    每一个原型都有一个定义节点执行内容的节点体,节点体可以由各种节点组合,包括标准节点和自定义节点。
    一个节点类型所能实现的功能都是由节点体来完成的。节点体是对节点做什么及怎样做的具体描述。

   原型的功能

     素材调用功能
     节点扩展功能
     动态更新保护功能
     造型及动作打包功能
     网络运作功能
语法:

PROTO  nodeTypeName 

  [

      field          fieldType    fieldName  DEFaultValue

      exposedField fieldType   fieldName  DEFaultValue

     eventIn         fieldType eventInName

     eventOut      fieldType   eventOutName 

  ]

 {

       nodebody

}

语法格式中,斜体部分是创建者自己定义的。


第一部分:关键字PROTO和原型节点名。


第二部分:节点接口,包括自定义的域和事件,数量不限,置于方括号内。


第三部分:节点体,包括标准节点、其它自定义节点,置于方括号外。


       nodeTypeNamep为原型节点名。通常第一个字母大写,每个单词的第一个字母也大写。


       field为原型节点的接口域。第一个字母小写

      exposedField为原型节点的公共域

      eventIn、eventOut为原型节点的事件。 入事件名称建议以set_开头,出事件名称建议以_changed结尾。如果是布尔型建议以is开头,

时间型建议以Time结尾。


      nodebody为设置节点体。使用IS语句调用。

原型节点的调用:


原型节点定义完毕后,其调用方法与其它的标准节点完全相同。


包括:原型节点名、花括号、花括号内为重新设置的接口域的数据。


如果没有赋值,则使用原型节点时创建者自己的默认值。

例子:

#VRML V2.0 utf8 
PROTO TwoColorTable [ 
	field SFColor legColor 0.8 0.4 0.7 
	field SFColor topColor 0.6 0.6 0.1 
] 
{ 
Transform { 
	children [ 
		Transform { 
			translation 0.0 0.6 0.0 
			children [ 
				Shape { 
					appearance Appearance { 
						material Material { 
							diffuseColor IS topColor 
						} 
					} 
					geometry Box { 
						size 1.2 0.2 1.2 
					} 
				} 
			]
		} 
		Transform { 
			translation -0.5 0 -0.5 
			children [ 
				DEF Leg Shape { 
					appearance Appearance {
						material Material {
							diffuseColor IS legColor 
						} 
					} 
					geometry Cylinder { 
						height 1 
						radius 0.1 
					} 
				} 
			] 
		} 
		Transform { #另一条桌腿 
			translation 0.5 0 -0.5 
			children[ USE Leg] 
		} 
		Transform { #另一条桌腿 
			translation -0.5 0 0.5 
			children[ USE Leg] 
		} 
		Transform { #另一条桌腿 
			translation 0.5 0 0.5 
			children[ USE Leg] 
		} 
	]#根节点Transform的子结束 
}#根Transform 结束 
}#原型结束
Transform {
	translation	1.5 0 0
	children [
		TwoColorTable{
			legColor 0.5 0.6 1
		}
	]
}
Transform {
	translation	-1.5 0 0
	children [
		TwoColorTable{
			topColor 1 0.6 0.5
		}
	]
}  



外部原型节点的定义和调用

使用PROTO原型节点定义和调用必须在同一VRML文件中进行,应用受到限制。如果需要从其它VRML文件或网络中调用已经定义好的原型节

点,就要使用EXTERPROTO外部节点。

外部原型节点的优点:节点定义可与VRML文件分开进行。即所有的原型节点集中保存在本机或网络中的某一VRML文件中,组成素材库,以方便

调用。

语法:

EXTERPROTO    nodeTypeName[ 

      field            fieldType    fieldName

      exposedField  fieldType   fieldName

      eventIn           fieldType eventInName

      eventOut       fieldType eventOutName 

  ]

 url orurlList

语法格式中,斜体部分是创建者自己定义的。


第一部分:关键字EXTERPROTO和原型节点名

第二部分:节点接口,包括自定义的域和事件,数量不限,置于方括号内。

第三部分:被调用的原型节点所在的外部文件的url地址或url地址列表,置于双引号内,字母url、urlList可以省

略。

通过如下格式调用PROTO定义的原型节点:如myproto.wrl文件 ,http://.../ myproto.wrl

如果是一组url地址,浏览器按从左到右的次序读取文件。

如果外部VRML文件包含多个PROTO原型节点,可通过“外部VRML文件名#PROTO原型节点名”调用。如myproto.wrl

文件,分别定义了PROTONode1、 PROTONode3 、PROTONode3 ,需要调用Node3的指定格式为:  http://.../

 myproto.wrl#Node3

例子

#VRML V2.0 utf8
EXTERNPROTO EXTTable [
	field SFColor  legColor
	field SFColor  topColor
]
"3-10.wrl#TwoColorTable"
Transform {
	translation  -1.5 0 0
	children [
		EXTTable{
			legColor  0.5 0.9 0.3
			topColor  0.8 0.4 0.3
		}
	]
}
Transform {
	translation  1.5 0 0
	children [
		EXTTable{
			legColor  0.8 0.3 0.6
			topColor  0.2 0.6 0.7
		}
	]
}

IS语句

       IS语句语法建立了一种从接口到节点体的一个连接。一旦连接成功,接口或公共域值就能自动地作为节点体的域或外部域值。

    与之相同,eventIn事件隐含的接口和公共域自动地按规定路线把事件发送到节点体或隐含的eventIn事件中,eventOut事件隐含的

节点体和公共域自动地按规定的路线用接口和隐含的eventOut事件发送事件。

     IS语句的格式:fieldName  IS  interfaceItem

fieldName可以是PROTO定义的节点体内的任何一个节点接口或Script节点接口的任何一个域、公共域、eventIn事件

eventOut件。

 interfaceItem可以是PROTO定义的接口中的任何一个接口域、公共域、eventIn事件和eventOut事件。

接口和节点体内的接口数据类型必须是相同的。

eventIn事件接口只能与节点体内的eventIn事件或公共域中隐含的eventIn事件相连接

eventOut事件接口只能与节点体内的eventOut事件或公共域中隐含的eventOut事件相连接。

接口域只能与节点体内的域或公共域相连接,并且接口公共域只能与节点体内的公共域相连接。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VRML 3D场景插入GUI-HCI(图形用户界面-人机交互)可以通过MATLAB来实现。MATLAB是一款强大的数学软件,它也可以用于图像处理、计算机图形学和人机交互等领域。 首先,我们可以使用MATLABvrmlwrite函数来创建VRML 3D场景。通过使用该函数,我们可以创建一个包含各种对象和几何体的3D场景。可以将各种物体、光源和相机等元素添加到场景。 其次,我们可以使用MATLAB的GUIDE(GUI Development Environment)来创建GUI。GUIDE提供了一种可视化的方式来创建各种界面元素,例如按钮、滑块、文本框等。我们可以使用GUIDE创建一个具有人机交互功能的GUI。 然后,我们需要将MATLAB的GUI与VRML 3D场景进行链接。可以通过在MATLAB使用事件处理函数来实现。例如,当用户在GUI上点击按钮时,我们可以编写一个事件处理函数来响应该事件,并在VRML场景执行相应的操作。这样,用户就可以通过GUI与VRML场景进行交互。 最后,我们可以使用MATLABvrview函数来显示VRML 3D场景和GUI。vrview函数可以将VRML场景和MATLAB创建的GUI结合在一起,显示在MATLAB的图形窗口。这样,用户就可以通过GUI与VRML场景进行交互,并实时观察场景的变化。 总而言之,通过MATLAB,我们可以在VRML 3D场景插入GUI-HCI人机交互。利用MATLABvrmlwrite函数创建VRML场景,使用GUIDE创建GUI,通过事件处理函数进行交互,并通过vrview函数将场景和GUI显示在MATLAB图形窗口。这样,我们可以实现一个具有人机交互功能的VRML 3D场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值