我正在尝试使用每像素光照着色器,但有一个问题:什么是光源的半向量?
vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz);
我希望您能用数学语言来解释,因为我比较擅长数学 :)
来自这篇文章:
“半向量”(如果您是指此项)是在两个其他向量之间的半角处的单位向量。通常,半向量[...]是在观察者v和光源l之间的向量之间计算的:
h := ( v + l ) / || v + l ||
Dario的回答是正确的,但由于问题是针对GLSL的,这里提供适当的代码:
vec3 hf = normalize(v + l);
通常,“THE”半向量是光线和视图向量之间的向量。它通常用作Blinn-Phong方程中镜面部分的输入。
这是我的解决方案:
vec3 halfVector = normalize(lightDirection + viewDirection);
编辑:虽然不是100%正确,但在想要更简单地完成时是有效的。