一、简单介绍
冯氏光照模型是由三部分组成,一个是环境光,一个是漫射光,还有一个就是镜面光。冯氏光照模型的提出主要就是为了去做出光照效果来影响物体的表面的颜色的。冯氏模型阐述了镜面光的计算依赖于观察者的观察方向和反射光向量之间的夹角,所以下面就会去去简单的介绍下镜面光的概念。
高强度的镜面光趋向于它所照射的表面上形成一个亮点,也就是镜面亮点。这个镜面两点的应用的话,其实就好比现实世界中总是存在金属的,金属看上去具有金属光泽,会有一个亮点,其实我们的镜面光就是去模拟这个效果的。
镜面反射可以使反射光线沿指定路径反射,常常用于聚光、增强亮度。
二、镜面光计算
关于镜面光的计算介绍如下
镜面光计算的主要特点就在于当观察者与对象角度有变化时,用户观察向量与反射向量之间的夹角有变化时,高光效果会有变化,所以只有动起来,高光效果才会有所变化。用户观察向量与反射向量之间的夹角是决定了能够观察到的高光的多少。夹角如果越大的话,高光就越小。夹角越小,高光越大。
计算高光的计算公式如下所示
specularResult = lightColor*specularMaterial*pow(max(0, V·R), shiness)
其中lightColor指的就是光照的颜色,specularMaterial指的就是物体表面的镜面材质,而V指的就是用户观察的向量,然后R指的就是光照入射向量的反射向量。
这里再简单的说明下反射向量应该怎么去求,先看一个图
根据下面这个图我们可以得到
R = 2C - L;
C = L + B;
L向量已经知道了,所以我们就要去求B向量来一次求出C向量,然后再得到R向量,根据向量的投影公式我们可以得出
所以B = -(L*N)*N,所以R= L-2(L*N)*N。
在真正的实际操作中肯定是不需要我们去计算这个反射向量的值的,有工具类中会有reflect函数,我们只需要传入入射光方向也就是光源方向的反方向和表面法线的方向就可以了。