VRML---第二章第二部分(造型外观属性)

不同物体由于自身的材料不相同而使物体的外观显得不同。

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


纹理节点

通过Material节点可以控制造型的外观材质,但对一些视觉细节并不能体现出来。
视觉细节可通过纹理映射来实现。纹理映射是一种用来加入细节的技术,根据几何体的外形,将纹理图按照一定规则映射到物体的表面。
对于复杂几何体可以使用纹理坐标TextureCoordinate节点控制精确的纹理映射。
纹理实际上就是一个位图。
在VRML中,能用来创建纹理图的格式有:JPEG、GIF、PEG、MPEG等。
同一造型的外观节点,只能选一种纹理节点。
纹理坐标由一个二维平面坐标系(ST)定义,节点来完成。纹理图左下角坐标为(0 0),右上角坐标为(1 1)。由(0 0) (1 0) (0 1)  (1 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节点是将像素以纹理的形式映射到造型表面。
像素纹理节点需要知道各点的颜色值,所以一般只用于简单的纹理。
 语法:

PixelTexture{

#Image的域值是用于设定对造型进行纹理包装的像素纹理的大小、类型和像素值。

exposedField  SFImage  image   0 0 0

  field         SFBool   repeatS  TRUE

  field         SFBool   repeatT  TRUE

}

数值前三个必须为整数。前二个为横向、纵向像素个数,第三个表示像素纹理类型,值可为0 1 2 3 4之一。(0 0 0)表示无像素包装。
像素纹理图的颜色从左下角第一个像素开始,一直到右上角最后一个像素填满结束。
image 2 2 3 0xFF0000 0x00FF00 0x0000FF 0xFFFF00,表示为2个像素宽、2 个像素高的三元彩色像素纹理图,左上角为红色,右上角为绿色,左下角为蓝色。右下角为黄色。


例子:

#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节点是将一段电影以纹理的形式映射到造型表面,产生动态纹理贴图的特殊效果。
该节点一方面设置电影纹理映射的参数,另一方面控制电影播放的时间和速度。如果电影文件包括伴音,则当播放时,MovieTexture节点会为Sound节点的source域指定所需的声音文件。

语法:

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
	}        #电影屏幕造型
}









你可能感兴趣的:(VRML造型外观属性)