镜面反射

specular_color = pow( v_e' * v_l, gloss ) * mat_specular * light_specular;

这里解释一下:

v_e' 是e_v的反射向量(v_e' = reflect( e_v, n ) ),

而e_v是眼睛到该点的单位向量,

所谓反射向量,即以与该点的法线所垂直的平面做镜面反射所得到的向量

v_l是该点到光源的单位向量;

v_e' * v_l 是两者的点积, 同样要用max(v_e' * v_l, 0),负的值也是不需要的;

pow是幂积,点积是底,gloss是指数;

gloss用来调制亮斑的大小,一般来说,gloss越大,光斑越细小,gloss越小,光斑分布越宽泛。

mat_specular,light_specular分别是材质和光源的镜面反射系数,用来宏观调制镜面反射的颜色。

原文地址:https://www.cnblogs.com/hutao886/p/6977716.html