vr_10

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

虚拟现实基础与VRML编程主讲何东健第10章VRML光照效果第10章VRML光照效果光源是指各种能发光的物体,如太阳或灯泡,但VRML世界中不存在这样的光源。VRML场景通过人工设置光源或使用系统缺省光源,进而对造型表面光影进行明暗分布计算,从而使造型与环境产生光照效果。VRML光源与自然光源的重要差别在于光照所产生的阴影,VRML的光源系统无法自动产生阴影或倒影效果。如果要对静态或动态造型实施阴影渲染,则必须首先由人工计算出阴影范围及其变化,而后通过人为设置阴影造型进行阴影渲染。10.1光源基本概念一个有色的光源照射一个有色的物体表面,将发生吸收和反射两种物理现象。人眼所能感觉到的只是其中的反射现象。反射光的颜色与物体表面的颜色密切相关,一束白色的光线照射到一个红色的物体上时,人所看到的反射光颜色是红色,这是因为白光由多种颜色光谱组成,红色物体吸收了其中除红色外的所有颜色光线,红色则被反射。但如果物体表面是黑色的,它将不反射任何光线。当一束有色光源照射到一个有色的造型上时,反射情况需具体分析。物体表面的亮度由照射它的光线的光强度和环境中其他物体反射光线的多少来决定。缺省情况,VRML浏览器只生成一个白色的头灯(headlight)光源,该头灯为平行光源,且与浏览者的视点同步运动,照亮浏览者的前方。该头灯可通过NavigationInfo节点的headlight域进行打开或关闭,但无法设置其光源颜色。本章之前所有创建的虚拟场景及其造型均在该缺省光源的照射之下得以显现。VRML中,添加光源并控制光照效果可通过点光源(PointLight节点)、平行光源(DirectionalLight节点)和锥光源(SpotLight节点)进行设置。点光源如同现实中的灯泡,由一个点向整个空间发射光线;平行光源如同激光,始终朝一个方向发射;锥光源则从一个点向一个方向照射,但只有在照明锥体中的造型才能被完全照亮。光源颜色,由一个RGB颜色域值进行控制,与Material节点中设置的各种颜色的控制方法完全相同。为了控制环境漫反射光线的多少,所有VRML光源节点都允许设置一个环境强度值,如果该值大,则表示虚拟场景中的漫反射环境光线强。10.2光源节点10.2.1点光源PointLight节点语法格式如下:PointLight{onTRUE#exposedFieldSFBoollocationO.0O.0O.0#exposedFieldSFVec3fradius100.0#exposedFieldSFFloatcolor1.01.01.0#exposedFieldSFColorintensity1.O#exposedFieldSFFloatambientIntensity0.0#exposedFieldSFFloatattenuation1.OO.0O.O#exposedFieldSFVec3f}(1)on域的域值:设置打开/关闭状态。缺省为TRUE。(2)location域的域值:设置点光源在当前坐标系中的位置,由一个X、Y、Z的三维坐标确定。缺省值为(0.00.0O.0),位于原点。(3)radius域的域值:设置点光源的辐射半径值。以radius域值为半径所定义的一个圆球体空间,该圆球体以外的区域将不被该点光源照亮。默认为100.0个VRML长度单位。(4)color域的域值:设置点光源的RGB颜色,缺省值(1.O1.O1.0),即白色。(5)intensity域的域值:设置点光源的明亮程度。域值在O.0~1.0的范围内变化,0.0最暗,1.0表示最亮(缺省)。(6)ambientIntensity域的域值:设置该点光源对照明球体中的造型所产生的环境光线的影响。该域值在0.0~1.0范围,0.0表示不产生环境漫反射影响,1.0表示环境漫反射影响最大。该域值缺省为0.0。(7)attenuation域的域值:设置点光源在照明球体内光强的衰减方式。该域值由一个三维矢量加以控制,域值中三个值:分别表示恒定衰减;在一定距离内的线性衰减;二次衰减(距离平方的衰减)。二次衰减是三者之中最具真实感的,但也是渲染速度最慢的。该域值缺省为(1.0O.O0.0),即默认照明球体中的亮度保持一致,即点光源各向同性,且光强不随距离的增加而发生衰减。例10.1点光源应用本例首先使用NavigationInfo节点将系统缺省使用的头灯平行光源关闭,然后人为设置了一个各向同性点光源,用以照亮场景中的球体造型。点光源渲染效果如图10.1所示。例10.1B点光源无法产生阴影(vr10_1B.wrl)如在场景中再增加一个球体造型,修改程序代码如下vr10_1B.wrl。由图10.2可看出,VRML中的虚拟光源无法像现实世界中的自然光源一样自动产生阴影。如果要想在虚拟世界中产生阴影,还必须人为计算并设置阴影造型。10.2.2平行光源DirectionalLight节点语法格式如下:DirectionalLight{onTRUE#exposedFieldSFBooldirection0.00.0-1.0#exposedFieldSFVec3fcolor1.01.01.0#exposedFieldSFColorintensity1.0#exposedFieldSFFloatambientIntensity0.0#exposedFieldSFFloat}DirectionalLight节点中,on、color、intensity、ambientIntensity域的作用与PointLight节点中相应域的作用完全相同,在此不再赘述。direction域的域值指定一个三维向量,用以表示平行光源的照射方向。该域值的3个分量由X、Y、Z三维坐标组成,由坐标原点指向该三维坐标点的矢量即为平行光源光线的照射方向。其缺省值为0.00.0-1.0,即默认光线的照射方向沿z轴负方向。注意:一束平行光源仅影响从属于同一父节点中所有的子节点造型,而不影响父节点之外的所有其他节点造型。例10.2平行光源应用(vr10_2.wrl)本例同样使用NavigationInfo节点将系统缺省使用的头灯光源关闭,然后人为设置了一个平行光源,用以照亮场景中的墙体造型。平行光源渲染效果如图10.3所示。尝试改变一下平行光源的照射方向,修改程序代码。与上图对比,可看出平行光源的方向影响。10.2.3锥光源SpotLight节点语法格式如下:SpotLight{onTRUE#exposedFieldSFBoollocation0.00.00.0#exposedFieldSFVec3fdirection0.00.0-1.0#exposedFieldSFVec3fradius100.0#exposedFieldSFFloatcutOffAngle0.785398#exposedFieldSFFloatbeamWidth1.570796#exposedFieldSFFloatcolor1.01.01.0#exposedFieldSFColorintensity1.0#exposedFieldSFFloatambientIntensity0.0#exposedFieldSFFloatattenuation1.00.00.0#exposedFieldSFVec3f}其中,on、location、radius、color、intensity、ambientIntensity、attenuation域的作用与PointLight节点完全相同;direction域的作用与DirectionalLight节点中相应域的作用类似,它表示光源锥轴的方向。CutOffAngle域的域值确定照明锥体的轴到锥体表面所形成的夹角。增大该域值可以扩大照明锥体,而减小该域值可以缩小照明锥体,锥体中的造型将被此锥光源照亮。该域值以弧度为计量单位,在0.0到1.571范围内变化,其缺省值为0.785398。beamWidth域的域值与cutOffAngle域作用类似,它确定了在照明锥体中包含的一个内部锥体的扩散角。其作用是,内部锥体中光照强度处处相等;而内部锥体到照明锥体的区域内,光照强度逐渐衰减,直至为零。该域值以弧度为计量单位,在0.0到1.571范围内变化,其缺省值为1.570796。图10.5所示为SpotLight作用域示意。例10.3锥光源应用本例设置了一个锥光源,用以照亮场景中的组合造型。锥光源渲染效果如图10.6所示。将beamWidth域值从0.5改为0.2,其场景效果如图10.7所示。10.3设置阴影例10.4设置阴影(vr10_4.wrl)本例首先关闭头灯,然后设置平行光源,除改变平行光源照射方向外(Y轴负方向),其他域值取其缺省值。场景中共创建了3个造型:用以模拟地面平板造型的、悬浮在半空中的球体以及在平行光源照射下该球体在地面上形成的圆柱造型阴影。垂直阴影渲染效果如图10.8所示。例10.4B设置阴影(vr10_4b.wrl)改变平行光源的照射方向,会产生光线斜照时的阴影效果。

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功