在glsl中,什么是光的半向量?

7

我正在尝试使用每像素光照着色器,但有一个问题:什么是光源的半向量?

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

我希望您能用数学语言来解释,因为我比较擅长数学 :)

3个回答

8

来自这篇文章

“半向量”(如果您是指此项)是在两个其他向量之间的半角处的单位向量。通常,半向量[...]是在观察者v和光源l之间的向量之间计算的:

h := ( v + l ) / || v + l ||

因此,半向量是视角和光线向量的单位角平分线编辑:有关照明模型及半向量的完整解释,请参阅Blinn-Phong维基百科文章

这真的正确吗?如果v是{0,5},l是{2,0},那么h和v之间的角度约为21度,h和l之间的角度约为69度。假设(v+l)是{2,5}且||v+l||是Sqrt[29]。 - ColacX
我认为这里假设v和l已经被标准化了。 - jgon

4

Dario的回答是正确的,但由于问题是针对GLSL的,这里提供适当的代码:

vec3 hf = normalize(v + l);

通常,“THE”半向量是光线和视图向量之间的向量。它通常用作Blinn-Phong方程中镜面部分的输入。


0

这是我的解决方案:

vec3 halfVector = normalize(lightDirection + viewDirection);

编辑:虽然不是100%正确,但在想要更简单地完成时是有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接