OpenGL_17_点光源

1,
(环境光,漫射光和镜面反射光),这三种模型都是基于平行光的。平行光只是通过一个向量来表示,没有光源起点,因此它不会随着距离的增大而衰减
点光源:它有光源起点而且有衰减效果,距离光源越远光线越弱。
平行光的方向是恒定的,但点光源光线的方向是变化的,四处扩散。
点光源向各个方向均匀照射,因此点光源的方向要通过计算物体到点光源之间的向量得到,这就是为什么要定义点光源的起点而不是它的方向。

但3D图形中这个公式计算的结果看上去效果并不好。例如:当距离很近时,光的强度接近无穷大了。另外,开发者除了通过设置光的起始强度外无法控制点光源的亮度,这样就太受限制了,因此我们添加了几个新的因素到公式中使对其的控制更加灵活:

在分母上添加了三个光衰减的参数因子,一个常量参数,一个线性参数和一个指数参数。当将常量参数和线性参数设置为零且指数参数设置为1时,就和实际的物理公式是对应的了,也就是这个特殊情况下在物理上是准确的。当设置常量因子参数为1时,调节另外两个参数整体上就有比较好的衰减变化效果了。
常量参数的设置是要保证当距离为0时光照强度达到最大(这个要在程序内进行配置),然后随着距离的增大光照强度要慢慢减弱,因分母在慢慢变大。
控制好线性参数因子和指数参数因子的变化,就可以实现想要的衰减效果,线性参数主要用于实现缓慢的衰减效果而指数因子可以控制光强度的迅速衰减


2,




3,




4,

posted @ 2017-03-28 01:07  细雨细语  阅读(609)  评论(0编辑  收藏  举报