Что такое половинный вектор света в ГЛСЛ? - PullRequest
6 голосов
/ 05 сентября 2010

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

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

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

Ответы [ 3 ]

7 голосов
/ 05 сентября 2010

С этот пост :

«Вектор на полпути» (если вы имеете в виду «вектор на половину») - это единичный вектор на половине угла между двумя другими векторами. Обычно вектор на полпути [...] вычисляется между вектором зрителя v и источником света l:

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

Таким образом, половинный вектор представляет собой единицу угол деления вектора обзора и света.

Редактировать: Полное описание модели освещения, включая половину вектора, см. В статье Blinn-Phong wikipedia

2 голосов
/ 29 мая 2016

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

vec3 hf = normalize(v + l);

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

0 голосов
/ 27 ноября 2017

это было мое решение:

vec3 halfVector = normalize(lightDirection + viewDirection);

РЕДАКТИРОВАТЬ: это не на 100% правильно, но работает, когда вы хотите сделать это более простым.

...