跳转至

半程向量

半程向量(Halfway Vector),即光线与视线夹角一半方向上的一个单位向量(如图中的 H )。

  1. 当半程向量与法线向量越接近时,镜面光分量就越大
  2. 当视线正好与反射向量对齐时,半程向量就会与法线完美契合。所以当观察者视线越接近于原本反射光线的方向时,镜面高光就会越强。

计算

获取半程向量的方法很简单,只需要将光线的方向向量和观察向量加到一起,并将结果正规化(Normalize)就可以了:

\(\bar{H} = \frac{\bar{L} + \bar{V}}{||\bar{L} + \bar{V}||}\)

vec3 lightDir = normalize(lightPos - FragPos); 
vec3 viewDir = normalize(viewPos - FragPos); 
vec3 halfwayDir = normalize(lightDir + viewDir);

参考文章

  1. 高级光照 - LearnOpenGL CN (learnopengl-cn.github.io)