2010-09-05 3 views
6

Я играю с пиксельными шейдерами освещения, и я не знаю ничего: Что такое половина вектора источника света?Что такое полувектор света в glsl?

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

Я бы, как я, вы можете объяснить это в математике строк, я понимаю математику лучше, чем слова :)

ответ

6

От this post:

«на полпути» вектора A (если вы имеете в виду, что «половинным вектором») является единичным вектором на половине угла между двумя другими векторами. Как правило, на полпути вектора [...] вычисляются между вектором к зрителю V и источник света, л:

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

Половина вектор, следовательно, является единицей angle bisector из view- и светового вектора.

Edit: Для полного объяснения модели освещения, включая половину вектора, просто увидеть Blinn-Phong wikipedia article

+0

Это действительно правильно? если v есть {0,5}, а l - {2,0}, то угол между h и v равен ~ 21 градусам, а угол между h и l составляет ~ 69 градусов. предполагая, что (v + l) есть {2,5} и || v + l || Sqrt [29] – ColacX

+0

Я думаю, что v и l считаются нормированными здесь. – jgon

2

ответ на Dario правильно, но так как этот вопрос был для GLSL, вот соответствующий код :

vec3 hf = normalize(v + l); 

Как правило, вектор «THE» - это вектор между светом и вектором вида. Он обычно используется в качестве входа в зеркальный бит уравнений Блинна-Фонга.

-2
vec3 halfVector = normalize(lightDirection + viewDirection); 
Смежные вопросы