虚拟现实技术主讲:杨文晖5VRML场景效果节点编程设计在VRML虚拟现实立体空间中,要设计出更完美、更逼真的三维立体场景,还需要对VRML场景进行渲染和升华,例如:自然界中大气雾化的效果三维立体造型的纹理(贴图)剧场的灯光效果环场立体声效果及视觉导航效果等等。节点内容1.空间大气效果2.纹理效果节点3.视点效果节点4.光照效果节点5.音响效果节点6.WordInfo信息化节点5.l空间大气效果什么是大气效果?空间大气效果就是通常所说的雾。在VRML世界里要真实地表现现实世界,就要把现实世界的雾化效果体现出来。还要体现雾的浓度效果,甚至要表现雾的颜色等。如何产生雾化效果?利用Fog雾化节点可以实现空间大气效果5.1.1Fog雾节点语法为使VRML场景更加真实,Fog雾节点可在VRML场景中添加雾气,如在清晨、雨后、山川、旷野等设计中使大气的背景空间具有更好的效果,使其具有朦胧之美。控制雾化效果有两个重要条件:一是雾的浓度;雾的浓度与观察者的能见度相反,距离观察者越远的虚拟现实景物的能见度越低,即雾越浓;距离观察者越近的虚拟现实景物能见度越高,即雾越淡。二是雾的颜色。当模拟烟雾时,需要改变雾的颜色,但通常情况下,雾是白色在VRML中添加大气效果是通过Fog节点来实现的。Fog节点通过定义可见度递减的区域来模拟雾或烟雾,还可以为雾着色。浏览器将雾的颜色与被绘制的物体的颜色相混合。Fog雾节点语法结构如图5-1所示的两种语法结构,在编程时均可选用Shape模型节点Fog雾节点Inline内联节点Transform组节点Group组节点Group组节点Background背景节点Fog雾节点Inline内联节点Fog节点语法定义Fog{Color0.00.00.0#域值类型MFColorfogType“LINEAR”#域值类型SFStringvisibilityRange0.0#域值类型MFFloatset_bind#输入接口SFBoolbind_changed#输出接口SFBool}域名和域值详解(1)color域的值定义了雾的颜色。设计者可以任意设定雾的颜色,以产生不同的视觉效果。该域值的默认值为(1.01.01.0)。(2)fogType域的值定义了雾的类型。当域值为“LINEAR”时,雾的浓度将随观察距离的增加而线性增大;当域值为“EXPONENTIAL”时,雾的浓度将随观察距离的增加而指数增大。该域值的默认值为“LINEAR”。(3)visibilityRange域的值指定了浏览者在当前VRML场景中的可见度。在浏览者的距离超过可见度范围时,造型完全被雾挡住而看不见了。当该域值比较大时,雾是逐步变浓的,就会产生薄雾的效果;当该域值比较小时,雾是突然变浓的,就像浓雾。该域值的默认值为0,即没有烟雾的效果。事件说明set_bind和isBound用来接收入事件和出事件:set_bind事件是eventIn(入事件),决定雾Fog节点为目前使用中的节点;isBound是evenOut(出事件),决定目前节点是受限制的TRUE或是不受限制的FALSE。5.1.2Fog雾节点语法实例[实例5-1]使用雾化节点创建一个公路路灯场景,并增加雾化节点,产生了大气效果使场景更加逼真、自然,如图5-2所示。(Vrml5-1.wrl)(10-1.wrl无雾)(10-2.wrl有雾)5.2纹理效果节点关于纹理纹理是一种位图,即二维图像。关于纹理映射把纹理图按一定规则粘贴到VRML立体空间造型表面的过程称为纹理映射。使用纹理映射能使立体空间造型更具真实感,纹理图的使用能增加浏览者的视觉效果,提高渲染的质量;如物体造型映射成大理石纹理形成地砖,映射成木纹形成地板,映射成墙砖形成墙壁等。关于纹理图像格式在VRML中,浏览器支持的纹理图像格式有JPEG、GIF、PNG及MPEG等。这些都是VRML文件材质贴图的标准格式。JPEG(JointPhotographicExpertGroup)是一种比较流行的图像存储格式。该格式存储图像文件较小,比较适合于网络传输,且图像质量比较高,是一种较好的图像存储格式,其文件扩展名为*.jpg,因为JPEG格式不支持图像中的像素透明度存储,所以JPEG格式存储图像文件时,不能包含像素的透明度信息。GIF(GraphicalInterchangeFormat)格式是一种适合在因特网上进行图像浏览的文件格式。这种格式使用文件压缩算法,文件占用空间较小,图像质量相对较低,其文件扩展名为*.gif,因GIF格式文件支持图像中的像素透明度存储,以GIF格式存储图像文件时,可以包含像素的透明度信息。PNG(PortableNetworkGraphics)格式是一种专门为取代GIF格式文件而开发的用于网络浏览的图像文件格式。它相对于GIF格式有更高的图片质量,支持单元素、双元素、三元素和四元素图像,其文件扩展名为*.png。由于PNG格式文件支持图像中的像素透明度存储,以PNG格式存储图像文件时,可以包含像素的透明度信息。MPEG(MovingPictureExpectsGroup)格式是比较流行的音像存储格式,采用高效率的图像和声音压缩技术,以此格式存储的电影文件的图像质量相当高,其文件扩展名为*.mpg。由于MPEG格式文件不支持图像中的像素透明度存储,以MPEG格式存储图像文件时,不能包含像素的透明度信息。5.2.1ImageTexture图像纹理节点VRML提供有3种纹理节点,即1.ImageTexture图像纹理节点2.PixelTexture像素纹理节点3.MovieTexture电影纹理节点。针对纹理还可利用TextureTransform节点进行平移、缩放、旋转等变换。对于复杂几何体还可使用TextureCoordinate节点进行精确的纹理映射。5.2.1ImageTexture图像纹理节点ImageTexture节点是图像纹理,把图像映射(粘贴)到立体空间的几何造型、面节点及海拔栅格节点上。它指定了纹理映射属性,通常作为appearance节点的texture域的域值。ImageTexture图像纹理节点语法结构图Shape模型节点Appearance外观属性节点几何或造型节点ImageTexture图像纹理节点外观节点Appearance域Geometry域Transform节点或Group节点texture纹理节点ImageTexture节点语法ImageTexture{url{}#exposeFieldSFStringrepeatSTRUE#fieldSFBoolrepeatTTRUE#fieldSFBool}域名和域值详解(1)url域指定了一个由高优先级到低优先级的URL排序表,用于粘贴图像文件名及来源位置,图像格式必须是JPEG,GIF或PNG格式的文件。VRML浏览器从地址列表中第一个URL指定位置试起,如果图像文件没有被找到或不能被打开,浏览器就尝试打开第二个URL指定的文件,依次类推。如果找到一个可打开的图像文件,该图像文件被读入,作为纹理映射造型;如果找不到任何一个可以打开的图像文件,将不进行纹理映射。(2)repeatS域的域值是布尔量。S代表水平方向。如果是TRUE,粘贴图像会重复填满这个几何对象表面到(0.01.0)的范围外,在水平方向,此为默认值;如果是FALSE,粘贴图片只会被限制在(0.01.0)的范围内,在水平方向重复填满几何对象表面。(3)repeatT域的域值是布尔量。T代表垂直方向。如果是TRUE,粘贴图片会重复填满这个几何对象表面到(0.01.0)的范围外,在垂直方向,此为默认值;如果是FALSE,粘贴图片只会被限制在(0.01.0)的范围内,在垂直方向重复填满几何对象表面。[实例5-2]在立体背景空间下,使用坐标变换节点、模型节点及图像纹理节点在球体上粘贴一个JPG图像,显示的效果图如图所示。[实例5-3]在蓝色立体空间中,利用背景节点、坐标变换节点、模型节点及图像纹理节点,在立方体上粘贴一个JPG图像,显示的效果图如图所示。5.2.2PixelTexture像素纹理节点PixelTexture节点是像素纹理节点,指定了纹理映射的属性,通常作为Appearance节点域的值。PixelTexture像素纹理节点语法结构图Shape模型节点Appearance外观属性节点几何或造型节点PixelTexture像素纹理节点外观节点Appearance域Geometry域Transform节点或Group节点texture纹理节点PixelTexture节点语法PixelTexture{image000#域值类型SFImagerepeatSTRUE#域值类型SFBoolrepeatTTRUE#域值类型SFBool}(1)repeatS域和repeatT域指定纹理坐标是回绕还是锁定。S代表水平方向,T代表垂直方向。如果域值为TRUE,则纹理坐标在纹理系统中回绕并重复;如果域值为FALSE,则纹理坐标不重复并且锁定。其默认值为TRUE。域和域值(2)image域的值指定了用来对造型进行纹理映射的纹理映像的大小和像素值。该域值的前3个值必须为整数,其中1.第1个数值表示以像素为单位的映像宽度,2.第2个数值表示以像素单位的映像的高度,3.第3个数值表示每一个像素的字节数(每个像素元素的字节组个数)。第3个值可在0,l,2,3,4这几个数中取值。0表示静止造型纹理,即关闭对几何对象表面贴图的功能;1表示每个像素提供一个字节组,表示灰度强度,从黑色(0x00)到白色(0xFF),如0x00(黑色);0x80(50%灰度),0xFF(白色);2表示每个像素提供两个字节组,一个字节组表示灰度强度,从黑色(0x00)到白色(0xFF);另一个字节组表示穿透性,从透明(0x00)到不透明(0xFF);如0x0000(黑色,透明)、0x80FF(灰色,不透明)、0xFF80(白色,半透明);3表示RGB颜色,每个像素提供3个字节组,每个字节组分别表示红、绿、蓝。每一组颜色变化值从无(0x00)到满(0xFF)。红色是高字节组、绿色是中字节组、蓝色为低字节组,如0x000000(黑色),0xFF0000(红色),0x00FF00(绿色),0x0000FF(蓝色),0xFFFF00(黄色),0xFFFFFF(白色);4表示每个像素提供4个字节组,一个字节组是红色,一个字节组是绿色,一个字节组是蓝色,一个字节组是穿透性。每一组从无(0x00)到满(0xFF)。红色是最高字节组,绿色是中高字节组,蓝色为中低字节组,还有穿透为低字节组,如0x00000000(黑色、透明),0xFF0000FF(红色、不透明),0xFFFF0080(黄色、半透明)。图片的颜色是从左下角第一个元素开始,一直到右上角最后一个元素填满。颜色的表示方式(像素值)是通过16进制来表示的。在立体空间背景下,使用坐标变换节点、模型节点及像素纹理节点创建不同像素的彩色纹理造型,如下图5.2.3MovieTexture影像纹理节点MovieTexture影像纹理节点是电影纹理,用来指定纹理映射属性,通常作为Appearance节点的texture域的值,也可以作为其他节点的子节点。MovieTexture节点主要是用于纹理映射的动态效果也可以使用MovieTexture节点来创建伴音,作为Sound节点sound域指定所需的声音文件,如播放电影时的电影声音。MovieTexture影像纹理节点语法结构图Shape模型节点Appearance外观属性节点几何或造型节点外观节点Appearance域Geometry域Transform节点或Group节点Material节点MovieTexture图像纹理节点MovieTexture节点语法MovieTexture{url{}#exposedFieldSFStringloopFAL