什么是glsl中的半光矢量?

时间:2010-09-05 14:28:41

标签: math opengl glsl

我正在使用每像素照明着色器,我不知道一件事:什么是光源的半矢量?

vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz);

我希望你能用数学行解释它,我比数学更能理解数学:)

3 个答案:

答案 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%正确,但是当你想要更简单的时候工作。