VRML---第三章第二部分(造型群节点)

      在VRML中有一类节点,可以把几何造型作为自己的子节点组合成一个整体,一起进行平移、旋转、缩放操作。
      这类节点主要有:Group编组节点、Transform坐标变换节点、Inline内联节点、Anchor锚联接节点、Switch选择节点、Billboard布告牌节点和LOD细节层次控制节点。
     编组Group节点提供了最简单的节点编组,可以包含任意数目的子节点。使用Group节点可以将多个不同或相同的节点组织在一起,以创建更复杂的物体造型,生成更真实的VRML场景 。

语法:

Group{

#children用于设定所包含的所有子节点。通常包含Shape、Transform及下一层的Group编组节点。组节点数目无限制。

  exposedFiled MFNode  children    [ ]

  field         SFVec3f   bboxCenter  0.0 0.0 0.0

  field         SFVec3f   bboxSize    -1.0 -1.0 -1.0

  eventIn      MFNode addChildren

  evenOut     MFNode removeChildren

}

例子:

#VRML V2.0 utf8
Group{
  children[
	Transform {
		rotation 1 0 0 1.571
		children [
			Shape {													   #表壳造型
				appearance Appearance {
					material Material {
						diffuseColor 0.7 0.2 0.2
			
					}
				}
				geometry Cylinder {
					radius 2.2
					height 0.5
				}
			}
		]
	}
  Transform {												   #表轴造型
	translation	0 0 0.3
	children [
		Shape {
			appearance Appearance {
				material Material {
					diffuseColor 0.5 0.3 0					
				}
			}
			geometry Sphere	{
				radius 0.1
			}
		}
		Transform {										   #分针造型
			translation	0 0.85 0
			children [
				Shape {
					appearance Appearance {
						material Material {
							diffuseColor 0.5 0.5 0.7							
						}
					}
					geometry Cylinder {
						height 1.5
						radius 0.05
					}
				}
			]
		}
	
		Transform {										   #时针造型
			translation	0.6 0 0
			rotation 0 0 -1 1.57
			children [
				Shape {
					appearance Appearance {
						material Material {
							diffuseColor 0.5 0.5 0.7							
						}
					}
					geometry Cylinder {
						height 1.0
						radius 0.05
					}
				}
			]
		}
	  ]
    }
  ]
}

节点定义及引用

节点的定义与引用格式:

    节点定义:DEF 节点名 节点{}
    节点引用:USE 节点名
     命名规则可用字母、数字及下划线,不能数字开头,字母区分大小写。保留字、引号、运算符号、各种括号及英镑符号等不能使用。
例子:
#VRML V2.0 utf8
Transform {
		rotation 1 0 0 1.571
		children [
			Shape {													   #表壳造型
				appearance Appearance {
					material Material {
						diffuseColor 0.7 0.2 0.2
			
					}
				}
				geometry Cylinder {
					radius 2.2
					height 0.5
				}
			}
		]
	}
Transform {											  #表轴造型
	translation	0 0 0.3
	children [
		Shape {
			appearance Appearance {
				material Material {
					diffuseColor 0.5 0.3 0
					ambientIntensity 0.4
					specularColor 0.7 0.7 0.6
					shininess 0.2
				}
			}
			geometry Sphere	{
				radius 0.1
			}
		}
		Transform {									   #分针造型
			translation	0 0.85 0
			children [
				Shape {
					appearance Appearance {
						material Material {
							diffuseColor 0.5 0.5 0.7
							ambientIntensity 0.4
							specularColor 0.8 0.8 0.9
							shininess 0.2
						}
					}
					geometry Cylinder {
						height 1.5
						radius 0.05
					}
				}
			]
		}
	
		Transform {									   #时针造型
			translation	0.6 0 0
			rotation 0 0 -1 1.57
			children [
				Shape {
					appearance Appearance {
						material DEF A1 Material {
							diffuseColor 0.5 0.5 0.7
							ambientIntensity 0.4
							specularColor 0.8 0.8 0.9
							shininess 0.2
						}
					}
					geometry Cylinder {
						height 1.0
						radius 0.05
					}
				}
			]
		}
		DEF	bkd1 Transform {							  #表盘刻度造型
			translation	0 1.8 0			
			children [
				Shape {
					appearance Appearance {
						material USE A1
					}
					geometry  Box {
						size 0.1 0.2 0.1
					}
				}
			]
		}
		
        Transform {
			rotation 0 0 1 0.524
			children [
				DEF	bkd Transform {	
				translation	0 1.8 0			
					children [
						Shape {
							appearance Appearance {
								material USE A1
							}
							geometry  Box {
								size 0.05 0.2 0.1
							}
						}
					]
				}
				Transform {
					rotation 0 0 1 0.524
			        children [
				        USE	bkd
						Transform {
							rotation 0 0 1 0.524
							children [
								USE	bkd1
								Transform {
									rotation 0 0 1 0.524
									children [
										USE	bkd
										Transform {
											rotation 0 0 1 0.524
											children [
												USE	bkd
												Transform {
													rotation 0 0 1 0.524
													children [
														USE	bkd1
														Transform {
															rotation 0 0 1 0.524
															children [
																USE	bkd
																Transform {
																	rotation 0 0 1 0.524
																	children [
																		USE	bkd
																		Transform {
																			rotation 0 0 1 0.524
																			children [
																				USE	bkd1
																				Transform {
																					rotation 0 0 1 0.524
																					children [
																						USE	bkd
																						Transform {
																							rotation 0 0 1 0.524
																							children [
																								USE	bkd
																							]
																						}
																					]
																				}
																			]
																		}
																	]
																}
															]
														}
													]
												}
											]
										}
									]
								}
							]
						}
					]
				}
			]
		}
	]
}						 

内联节点

     VRML文件很大时,不易管理和调试。可把复杂的场景和造型分解成各自独立的小文件,分别进行设计和调试,用内联的方法联接起来。
    内联Inline节点可以用来从WWW网络的任意地方读取VRML文件,若url域为空,则没有任何动作。内联节点是将素材作为完整场景的一个组成部分调用到原场景中来。 
语法:

Inline{

  exposedField  MFString  url  “”

  exposedField  SFVec3f  bboxCenter  0 0 0

  exposedField  SFVec3f  bboxSize    -1 -1 -1

}


例子:
#VRML V2.0 utf8
Transform{
	translation  -6 0 0
	children[
		Inline {		     #内联简单的钟表造型
			url  "2-2.wrl"
		}
	]
}
Inline{					     #内联正方体造型造型
	url  "2-6.wrl"
}
Transform{
	translation  6 0 0
	children[
		Inline {		      #内联复杂的钟表造型
			url "3-7.wrl"
		}
	]
}

锚链接节点

   在原场景中设置一个锚链接节点造型,当浏览者单击造型时,VRML浏览器即可链接到设定的素材文件,使浏览者从原场景中出来,进入到素材文件所构建的新场景中去。
     
    锚链接Anchor节点是把素材作为一个新的完整场景进行调用。
语法:

Anchor{

    exposedField  MFstring  url        “”

    exposedField  MFNode  children    []

#description域的域值用于设定一个文本提示,当移动光标到锚点对象而不单击它时,浏览器显示该提示文本。

    exposedField  MFstring  description “”

#parameter域的域值用于设定浏览器附加的信息,为一个形如“关键词=值”的字符串。

    exposedField  MFstring  parameter  []

    field             SFVec3f  bboxCenter  0 0 0

      field             SFVec3f  bboxSize    -1 -1 -1

    eventIn       MFNode  addChildren

    evenOut      MFNode  removeChildren

}

       当用户选择Anchor节点中的任一子节点对象时,可将Anchor节点中URL域中指定的文件从本地或网络上取来。
      如果此文件是VRML虚拟世界,则装入并显示它,以取代包含本Anchor节点的虚拟世界。
      如果取得的文件是其他类型的文档,由浏览器决定如何处理这些数据。
      Anchor节点也可用于将浏览者带入虚拟世界中的一个特定观察位置,在指定URL时要以“#viewpointName”结尾,“#viewpointName”是以DEF定义的视点名。
例子:
#VRML V2.0 utf8
Anchor{                                    #锚链接节点
	children[
		Shape {                              #文本锚点造型
			appearance  Appearance{
				material Material{}
			}
			geometry  Text{
				string  ["Red Clock"]
				fontStyle  FontStyle{
					size  2
					style  "BOLDITALIC"
					justify["MIDDLE"  "MIDDLE"]
					}
			}
		}
	]
	description  "Call Red Clock"
	url  "3-6.wrl"                  #链接子场景钟表造型
}

内联节点与锚链接节点的区别:

         内联节点是将素材作为完整的场景的一个组成部分调用到原场景中来,而锚链接节点是把素材作为一个新的完整的场景进行调用。
         在原场景中设置一个锚链接节点造型,当浏览者单击造型时,VRML浏览器即可链接到设定的素材文件,使浏览者从原场景中出来,进入到素材文件所构建的新场景中去。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值