我正在使用每像素照明着色器,我不知道一件事:什么是光源的半矢量?
vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz);
我希望你能用数学行解释它,我比数学更能理解数学:)
答案 0 :(得分:7)
来自this post:
“中间矢量”(如果你的意思是“半矢量”)是两个其他矢量之间半角的单位矢量。通常,在向观察者v的矢量和光源l:
之间计算中间矢量[...]
h := ( v + l ) / || v + l ||
因此,半矢量是视矢量和光矢量的单位angle bisector。
编辑:有关包含半矢量的灯光模型的完整说明,请参阅Blinn-Phong wikipedia article
答案 1 :(得分:2)
Dario的答案是正确的,但由于问题是针对GLSL,这里是适当的代码:
vec3 hf = normalize(v + l);
通常,“THE”半矢量是光和视图矢量之间的矢量。它通常用作Blinn-Phong方程的镜面反射位的输入。
答案 2 :(得分:0)
这是我的解决方案:
vec3 halfVector = normalize(lightDirection + viewDirection);
编辑:它不是100%正确,但是当你想要更简单的时候工作。