Math glsl中的光的半矢量是什么?

Math glsl中的光的半矢量是什么?,math,opengl,glsl,Math,Opengl,Glsl,我正在玩逐像素照明着色器,但我不知道一件事:光源的半矢量是什么 vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz); 我希望你能在数学行中解释它,我对数学的理解比单词更深刻:)来自: “中间向量”(如果你说的是“半向量”)是两个其他向量之间夹角的单位向量。通常,在到观察者v的向量和光源l之间计算中间向量[…]: 因此,半矢量是视矢量和光矢量的单位 编辑:有关照明模型(包括半矢量)的完整解释,请参见Dario的回答是正确的,

我正在玩逐像素照明着色器,但我不知道一件事:光源的半矢量是什么

vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz);
我希望你能在数学行中解释它,我对数学的理解比单词更深刻:)

来自:

“中间向量”(如果你说的是“半向量”)是两个其他向量之间夹角的单位向量。通常,在到观察者v的向量和光源l之间计算中间向量[…]:

因此,半矢量是视矢量和光矢量的单位


编辑:有关照明模型(包括半矢量)的完整解释,请参见

Dario的回答是正确的,但由于问题是针对GLSL的,因此以下是相应的代码:

vec3 hf = normalize(v + l);
通常,“半”矢量是光和视图矢量之间的矢量。它通常用作Blinn-Phong方程镜面反射位的输入

这是我的解决方案:

vec3 halfVector = normalize(lightDirection + viewDirection);

编辑:它不是100%正确,但当你想做得更简单时就可以工作。

这真的正确吗?如果v为{0,5},l为{2,0},则h和v之间的角度约为21度,h和l之间的角度约为69度。假设(v+l)是{2,5},| | v+l | |是Sqrt[29],我认为这里假设v和l是归一化的。
vec3 halfVector = normalize(lightDirection + viewDirection);