FontStyle 这一个节点定义文本的字体大小,字体族和字体样式,以及文本字符串的方向和任何必须用于非英语文本的特点语言渲染技术。其结构如下:
FontStyle { field MFString family “SERIF” field SFBool horizontal TRUE field MFString justify “BEGIN” field SFString language “ ” field SFBool leftToRight TRUE field SFFload size 1.0 field SFFload spacing 1.0 field SFString style “PLAIN” field SFBool topToBottom TRUE }
域和事件如下: family 字体族(SERIF、SANS或者TYPEWRITER)。 horizontal 如果为TRUE,则每一个文本字符串以水平方式渲染;如果为FALSE,则每一个文本字符串以方式渲染 justify 使用的对齐方法。该域可以有两个字符串值,第一个是沿主轴的对齐方法(如horizontal所确定的),第二个是沿铺助轴的对齐方法。这些值可以是BEGIN、MIDDLE或者END。 language 一个识别字符串所用语言的字符串,用它来在极少的、可以渲染多种字符集的例子中选择正确的字符集。 leftToRight 如果为TRUE,则所给的字符串为从左到右;如果为FALSE,则所给的字符串为从右到左。它可以是主轴,也可以是铺助轴,取决于horizontal的值。 size 字符的大小。尽管它与字体无关,实际上这是字符的高度。该值还确定文本的连续行之间空间的大小。 spacing 其值乘以size域来确定连续文本行之间的实际距离。 style 字体样式(PLAIN、BOLD、ITALIC或者BOLDITALLC)。 topToBottom 如果为TRUE,则所给的字符串从顶到底;如果为FALSE,则所给的字符串为从底到顶。它可以是主轴,也可以是铺助轴,取决于horizontal的值。 |
以下就是FontStyle节点的一个实际运用。
#VRML V2.0 utf8
Transform {
translation ?9 0 0
children Shap
geometry Text{
string [ “WELCOME” ]
fontStyle FontStyle {
#family “SANS”
#styly “BOLDITALLC”
}
}
}
}
Transform {
translation -2 0 0
children Shape {
geometry Text{
string [ “WELCOME” ]
fontStyle FontStyle {
size 2
}
}
}
}
Group 该节点可以出现在文件的顶层,或者作为成组节点的子节点。它是运用最广泛的成组节点。其结构如下:
Group { evenIn MFNode addChildren evenIn MFNode removeChildren exposedField MFNode children [ ] field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 }
域和事件如下: addChildren 将传递的节点加入到children中。 removeChildren 将传递的节点加入到children中去掉。 children 本节点的子节点表。 bboxCenter 环绕本节点所有子节点的、与坐标轴对齐的立方体的中心。 bboxSize 环绕本节点所有子节点的、与坐标轴对齐的立方体的大小。 |
ImageTexture 该节点是纹理节点,可以出现在Appearance节点的texture域中。它通过指定一个图像文件和映像到几何图形的通用参数来定义一个纹理映像。其结构如下:
ImageTexture { exposedFild MFString url [ ] field SFBool repeatS TRUE field SFBool repeatT TRUE }
域和事件如下: url 图像数据的位置。 repeatS 如果为TRUE,则纹理在对象的表面上以纹理的S方向(对应于X方向)重复。如果为FALSE,则它只显示一次,纹理的边缘在对象的其它部分上水平重复。 repeatT 如果为TRUE,则纹理在对象的表面上以纹理的T方向(对应于Y方向)重复。如果为FALSE,则它只显示一次,纹理的边缘在对象的其它部分上水平重复。 |
下例中的球体和立方体均使用ImageTexture节点进行了纹理贴图。
#VRML V2.0 utf8
Transform {
translation ?2 0 0
children Shape {
appearance DEF A Appearance {
material Material { }
texture ImageTexture {
url”1.gif”
}
}
geometry Box { }
}
}
Transform {
translation -2 0 0
children Shape {
appearance DEF A Appearance {
material Material { }
texture ImageTexture {
url”1.gif”
}
}
geometry Box { }
}
}
Transform {
translation 2 0 0
children Shape {
appearance USE A
geometry Sphere { }
}
}
IndexedFaceSet 该节点表示一个3D形状,可以出现在Shape节点的geometry域中。它通过由coord域中所列出的顶点来构造表面(多边形)而形成,通过coordIndex域进行索引。所有坐标在局部坐标系中指定,受父变换的影响。其结构如下:
IndexedFaceSet { eventIn MFInt32 set_colorIndex eventIn MFInt32 set_coordIndex eventIn MFInt32 set_normalIndex eventIn MFInt32 set_texCoordIndex exposedField SFNode color NULL exposedField SFNode coord NULL exposedField SFNode normal NULL exposedField SFNode texCoord NULL field SFBool ccw TRUE field MFInt32 colorIndex [ ] field SFBool colorPerVertex TRUE field SFBool convex TRUE field MFInt32 coordIndex [ ] field SFFloat creaseAngle 0 field MFInt32 normalIndex [ ] field SFBool normalPerVertex TRUE field SFBool solid TRUE field MFInt32 texCoordIndex [ ] }
域和事件如下: set_colorIndex 设置colorIndex域的值。 set_coordIndex 设置coordIndex域的值。 set_normalIndex 设置normalIndex域的值。 set_texCoordIndex 设置texCoordIndex域的值。 color 一个Color节点。 coord 一个Coordinate节点。 normal 一个Normal节点。 texCoord 一个TextureCoordinate节点。 ccw 如果为TRUE,则对象从顶部可见(从Y轴向下看);;如果为FALSE,则对象从底部可见。 colorIndex 针对颜色表的索引表。颜色作用于由colorPerVertex域所确定的每一个顶点或者每一个面。每一页的索引集合(由-1结尾的索引表)必须与coordIndex域中的相匹配。 colorPerVertex 如果为TRUE,则color域中的值作用于每一个节点。如果为FALSE。则它们作用于坐标网格的每一个面。 convex 如果为TRUE,则所有表面必须为凸的,否则结果则无法定义;如果为FALSE,则表面可以为凹的,也可以为凸的。 coordIndex 组成每一个表面顶点的坐标表的索引表。通过用-1结束每一个索引表可以包含多个表面。 creaseAngle 当normal域为NULL时,它决定表面之间的角度,在这些表面之上可以看见折缝。 normalIndex 针对法向量表的索引表。这些法向量作用于由normalPreVertex域所确定的每一个顶点或者每一个表面。每一个表面的索引集合(由-1结尾的索引表)必须与coordIndex域中的相匹配。 normalPerVertex 如果为TRUE,则normal域中的值作用于每一个顶点;如果为FALSE,则它们作用于坐标网格的每一个表面。 solid 如果为TRUE,则只有对象的前面可见(如ccw域所确定);如果为FALSE,则两面都可见。 texCoordIndex 针对纹理坐标表的索引表。纹理坐标作用于每一个顶点。每一个表面的索引集合(由-1结尾的索引表),必须与coordIndex域中的相匹配。 |
下面是一个IndexdeFaceSet的运用,它可以创造出各种复杂的形体,我们只以最简单的立方体来说明IndexedFaceSet的运用。
#VRML V2.0 utf8
Shape {
geometry IndexdeFaceSet {
coord Coordinate {
point [-1 -1 1,1 -1 1,1 1 1,-1 1 1,
-1 -1 -1,1 -1 -1 ,1 1 -1,-1 1 -1]
}
coordIndex [0,1,2,3,-1,
5,4,7,6,-1,
1,5,6,2,-1,
4,0,3,7,-1,
4,5,1,0,-1,
3,2,6,7,-1,]
}
}
IndexdeLineSet 该节点表示一个3D几何图形,可以出现在Shape节点的geometry域中。它通过由coord域中指定的3D点构造多种线形而形成,由coordIndex域进行索引。所有坐标在局部坐标系中指定,受父变换的影响。其结构如下:
IndexedLineSet { eventIn MFInt32 set_colorIndex eventIn MFInt32 set_coordIndex exposedField SFNode color NULL exposedField SFNode coord NULL field MFInt32 colorIndex [ ] field SFBool colorPerVertex TRUE field MFInt32 coordIndex [ ] }
域和事件如下: set_colorIndex 设置colorIndex域的值。 set_coordIndex 设置coordIndex域的值。 color 一个Color节点。 coord 一个Coordinate节点。 colorIndex 针对颜色表的索引值。这些颜色作用于由colorPerVertex域所确定的每一个顶点或者每一个表面。每一个表面的索引集合(由-1结尾的索引表)必须与coordIndex域中的相匹配。 coordPerVertex 如果为TRUE,则color域中的值作用于每一个顶点;如果为 FALSE,则它们作用于坐标网格的每一个表面。 coordIndex 组成每一个表面顶点的坐标表的索引表。通过用-1结束每一个索引表可以包含多个表面。 |
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0 1 1
}
}
geometry IndexedLineSet {
coord Coordinate {
point [6 8 0,5 9.2 0,4 9.5 0,3 9.6 0,
1.8 9 0,1.1 8 0,0.7 7 0,0.3 5 0,
0.6 3 0,2 1.2 0,3 0.9 0,5 1.3 0,
8.3 3 0,10 3.3 0,12 2 0,11.9 4 0,
11.2 5 0,9.3 6 0,7.5 5 0,3.8 2 0,
2 2 0,1 4 0,1.4 6 0,7.5 5 0,3.8 2 0,
3.5 8 0,5 8.4 0,]
}
coordIndex [0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,
17,18,19,20,21,22,23,
24,25,0]
}
}
InLine 这是一个成组节点,可以出现在文件的顶层,或者作为成组节点的子节点。它从url域所指定的位置读取其子节点的数据。其结构如下:
InLine { exposedField MFString url [ ] field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 }
域和事件如下: url 加载和插入到场景中代替此节点的VRML文件的位置。 bboxCenter 环绕本节点所有子节点的,与坐标轴对齐的立方体的中心。 bboxSize 环绕本节点所有子节点的,与坐标轴对齐的立方体的大小。 |
LOD 这一节点可以出现在文件的顶层或者作为成组节点的子节点。它指定一个给定的对象的各种层次的细节或复杂性,并为浏览器提供线索,以其根据与用户的距离,自动选择合适的对象形式。其结构如下:
Lod { exposedFiled MFNode level [ ] field SFVec3f center 0 0 0 field MFFloat range [ ] }
域和事件如下: level 每一层所显示的节点表,表中的一个节点在每一个范围入口处显示。第一层是最近的范围,最后一层是最远的范围。 center 局部坐标空间中用来确定离阅览器距离的点,此距离用来确定所显示的层次。 range 层次切换的范围表。范围值的个数应当比层数少。范围以升序指定。 |
我们用LOD节点做一个路灯的夜况,当距离它15个单位时,该球体是绿色,当为10到15个单位之间时,该球体是黄色,当不到10个单位时,该球体是红色。
#VRML V2.0 utf8
DEF overview Viewpoint {
position 0 0 25
fieldOfView 0.785398
description “OVERVIEW”
}
LOD {
level [
Transform {
children
Shape {
appearance Appearance {
material Material {diffuseColor 1 0 0}
}
geometry Sphere {radius 4}
}
}
Transform {
children
Shape {
appearance Appearance {
material Material {diffuseColor 1 1 8}
}
geometry Sphere {radius 4}
}
}
Transform {
children
Shape {
appearance Appearance {
material Material {diffuseColor 0 1 0}
}
geometry Sphere {radius 4}
}
}
}
]
center 0 0 0
range [10,15]
[下载相关文件]