不同物体由于自身的材料不相同而使物体的外观显得不同。
VRML 为用户提供的色调控制工具就是Appearance节点,将外观属性从造型几何尺寸的属性中分离出来,使得外观属性可以重复使用。
Appearance节点用来指定立体造型的外观属性,通常作为Shape界定的appearance域的域值。
语法:
Appearance{
#material域的域值用于设定一个材质Material节点,该节点定义了造型外观的材料属性,包括颜色、透明度、反光度、发光度等。默认值为NULL
exposedField SFNode material NULL
#texture 域的域值设定应用于造型表面静态或动态的纹理贴图。通常包括纹理贴图:ImageTexture节点、像素纹理PixeTexture节点和电影纹理MovieTexture节点。默认值为NULL
exposedField SFNode texture NULL
#textureTransform域的域值用于设定在纹理映射到一个造型表面时所使用的二维纹理坐标变换。通常域值包含纹理变换TextureTransform节点。默认为NULL
exposedField SFNode textureTransform NULL
}
Material{
#该域的域值用于设定一种材料的漫反射颜色。此域值用一个三维数组来表示RGB颜色,默认值为 中强度的白光
exposedField SFColor diffuseColor 0.8 0.8 0.8
#该域的域值设定将有多少环境光被该表面反射
exposedField SFColor ambientIntensify 0.2
#该域的域值设定造型的镜面反射光线RGB颜色
exposedField SFColor specularColor 0 0 0
#该域的域值设定一个发光物体产生的光的颜色
exposedField SFColor emissiveColor 0 0 0
#该域的域值设定造型外观材料的亮度
exposedField SFFloat shininess 0.2
#该域的域值设定物体的透明度
exposedField SFFloat transparency 0
}
例子:
#VRML V2.0 utf8
Shape { #表壳造型
appearance Appearance {
material Material {
diffuseColor 0.6 0.2 0.2
}
}
geometry Box {
size 4 4 2
}
}
常见的造型材质的参考颜色域值列表
视觉 效果 |
漫反射颜色 |
环境颜色 |
镜面反射 |
亮度 |
diffuseColor |
ambientIntensity |
specularColor |
shininess |
|
黄金 |
0.5 0.3 0 |
0.4 |
07 0.7 0.6 |
0.2 |
白银 |
0.5 0.5 0.7 |
0.4 |
0.8 0.8 0.9 |
0.2 |
铜 |
0.4 0.2 0 |
0.28 |
0.8 0.4 0 |
0.1 |
ImageTexture{
#url的域值是图像文件名,包括扩展名。从第一个文件开始,按文件优先级依次查找。若找不到,则不进行纹理映射。
exposedField MFString url []
#repeatS的域值是设定纹理图像是否沿S方向重复粘贴,TRUE为沿S方向重复粘贴,直至横向填满造型表面,否则只粘贴一次。
field SFBool repeatS TRUE
#repeatT的域值是设定纹理图像是否沿T方向重复粘贴,TRUE为沿T方向重复粘贴,直至横向填满造型表面,否则只粘贴一次。
field SFBool repeatT TRUE
}
例子:
#VRML V2.0 utf8
Transform {
translation -3 0 0
children[
Shape{
appearance DEF a Appearance{
texture ImageTexture{
url "Water lily1.jpg"
} #荷花图像纹理
}
geometry Box{} #默认设置正方体造型
}
]
}
Transform{
translation 2 0 0
children[
Shape{
appearance USE a
geometry Box{
size 4 4 4
}
}
]
}
PixelTexture{
#Image的域值是用于设定对造型进行纹理包装的像素纹理的大小、类型和像素值。
exposedField SFImage image 0 0 0
field SFBool repeatS TRUE
field SFBool repeatT TRUE
}
例子:
#VRML V2.0 utf8 Transform{ translation -4 0 0 children[ Shape{ appearance DEF b Appearance{ material Material {} texture PixelTexture{ #红、绿、蓝、黄 image 2 2 3 0xFF0000 0x00FF00 0x0000FF 0xFFFF00 } } geometry Box{} #默认尺寸的正方体 } ] } Shape{ appearance USE b geometry Cylinder{} #默认尺寸的圆柱体 } Transform{ translation 4 0 0 children[ Shape{ appearance USE b geometry Cone{} #默认尺寸的圆锥体 } ] }
MovieTexture{
exposedField MFString url [ ]
#设定是否循环播放电影文件。默认为 FALSE
exposedField SFBool loop FALSE
#设定播放的速度
exposedField SFFloat speed 1.0
#设定电影开始播放的时间
exposedField SFTime startTime 0
#设定电影结束播放的时间
exposedField SFTime stopTime 0
field SFBool repeatS TRUE
field SFBool repeatT TRUE
#为出事件,表示电影持续播放的时间,以秒计算。-1表示电影还没有装载。
eventOut SFTime duration_changed
#为出事件,用于指明电影当前是否正在播放。播放时为TRUE ,播放结束时以FALSE值送出。
eventOut SFBool isActive
}
#VRML V2.0 utf8 Transform{ translation 0 0 -0.1 children[ Shape{ appearance Appearance{ material Material{ diffuseColor 0.3 0.3 0.3 } } geometry Box{ size 5.1 3.4 0.2 } #电视造型 } ] } Shape{ appearance Appearance{ texture MovieTexture{ #电影纹理节点 url "xpnh.MPG" #电影文件 loop TRUE } } geometry Box{ size 4.5 3 0.01 } #电影屏幕造型 }