1.环境光线
在现实世界中,物体表面为直接照射其表面的光源和由其他表面所反射的光线所照亮直接光线是指该光线从光源直接、无障碍地照射到一个造型上,如桌面上的台灯对灯下的书本的照射。环境光线是由分散光线和反射光线形成的,比如阴天时并不能确定太阳的位置,但周围的物体还是被照亮了。
在VRML中,可以模拟直接光线和环境光线的效果。在三种光源照射范围内的造型或造型的一部分是由直接光线照射的。为了控制一个VRML世界中环境光线的水平,可以给每一种光源提供一个环境亮度值,如果该值较高,则表示该光源在该VRML世界产生的环境光线较多,如太阳的环境亮度值较高。如果该值较低,则表示该光源在VRML世界中将产生较少的环境光线,如一个聚光性很好的闪光灯所产生的环境光线就很少。
2.光线强度衰减
光线强度衰减是描述随着光源与实体直接距离的增加光源照明逐步减弱的过程。通过控制光线强度衰减参数,可以实现用一个光源照亮很大的区域或只能照亮其周围的区域 VRML 的 PointLight和 Spotlight节点有两个控制光线强度衰减的参数:一个含三个强度衰减参数的集合和光束半径。强度衰减参数控制光锥体中,沿截面半径从中心到边缘变化,它可以使被照亮区域中的各点是相同的亮度,也可以把光照水平随距离的增加而迅速降低。光束半径用于控制一个光源可照射的最大范围。小半径的光源只能照亮其周围很小的区域,而在半径的光源可以照亮其周围一个很大的区域。
由于平行光源没有具体位置, DirectionalLight节点没有半径或强度衰减参数,而且平行光源只照亮在同一组中(组节点如 Transform节点)的节点与 DirectionalLight节点同组的造型由该平行光源照亮,而非同组的造型则不会被照亮。
3.光亮点
在现实世界中,若将一个聚光光源照射到一个巨大正方体表面的中央,则会在该表面的中央产生一个亮点。但是实际效果可能会因 VRML 浏览器和图形硬件而异正确计算上述聚光光源的效果需要先进的图形硬件,这超出了大多数人所能承受的范围图形软件固然可以完成上述计算,但是将耗费大量的时间,这对交互式图形而言是不现实的。因此在VRML世界中被点光源或聚光光源照射的造型不可能表现出所希望的在现实世界的光照效果。
如果要改变上述光照的局限,应该将造型表面网格化。比如用小的面片组成的造型,用聚光光源照射网格的中央。光照是在网格中的每一个坐标点计算的,每一个小平面被独立处理。接近中心以及距离聚光光源较近的小平面显得明亮,而那些距离整个平面的边缘较近的小平面将显得较暗,这样就在聚光光源照射的表面中央生成了一个亮点。
光滑的造型,如圆柱、圆锥和球通常以同样的方式处理,以生成有小平面的造型。但是长方体是没办法被网格化的,可以采用 IndexedFaceSet和节点生成自己的平面或曲线的网格化表面。
4.白色光
在VRML中,可以使用 Material、 Color和纹理节点设置造型的颜色当白色光线照射到那些有颜色的造型上时,每一个造型将反射光中的某些颜色一个蓝色的造型反射蓝色,一个红色的造型反射红色光等。
当一束有色光照射到一个白色表面时,被反射的光的颜色是有色光中的颜色,如以一束红色光照射一个白色表面,该表面将显示为红色,因为光的颜色只有红色被反射。一个造型的颜色,与造型本身的颜色以及照射光的颜色有关。有色光照射有色表面的情况就有些复杂。如一个蓝色表面只能反射蓝色光,而一束红色光中不含蓝色光这样当蓝色表面被红色光所照射时将显示为黑色,因为没有蓝色光可反射。但是当蓝色光照射蓝色表面时,将显示为蓝色。
内容来源:薛庆文《虚拟现实VRML程序设计与实例》