2010-09-05 59 views
6

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

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

我想我可以在数学行解释,我理解数学比的话:)

回答

6

this post更好:

A“半路载体”(如果你的意思是乘以“半矢量”)是两个其他矢量之间半角的单位矢量。通常情况下,中途矢量[...]被计算的矢量给观众v和光源L之间:

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

半向量因此是视图 - 和光矢量的单元angle bisector

编辑:对于包括半向量的光照模型的完整解释,只看到Blinn-Phong wikipedia article

+0

这是真的吗?如果v是{0,5}并且l是{2,0},那么h和v之间的角度是〜21度,并且h和l之间的角度是〜69度。假设(v + 1)是{2,5}并且|| v + 1 ||是Sqrt [29] – ColacX 2012-12-13 02:35:31

+0

我认为v和l假定在这里归一化。 – jgon 2016-12-12 11:18:13

2

的由达里奥的答案是正确的,但由于问题对于GLSL,这里是适当的代码:

vec3 hf = normalize(v + l); 

通常,“THE”半矢量是光与视图矢量之间的矢量。它通常用作Blinn-Phong方程的镜面位的输入。

-2
vec3 halfVector = normalize(lightDirection + viewDirection);