Расчет положения на прожекторном конусе в шейдере Фонга

Я пытаюсь реализовать легкие куки (или гобо, или легкие текстуры, или легкие маски) для THREE.SpotLight в PhongMaterial в WebGLRenderer. Цель состоит в том, чтобы иметь возможность прикрепить текстуру к источнику света, что-то вроде этого:http://www.idjnow.com/ProductImagesLarge/GOBO-GLASS1C.jpg Текстура будет снижать интенсивность света, создавая теневую проекцию.

Я думаю, что у меня есть «прикрепление текстуры к свету и передача ее в виде униформы для поиска в шейдере», хотя я не смог ее проверить, потому что у меня возникают проблемы с вычислением моей позиции в конусе / месте прожектора.

Я вижу, что световой вклад прожекторов рассчитывается здесь (я изменяю источник Three.js напрямую, вместо того, чтобы создавать свой собственный материал):

https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLShaders.js#L1013

Пятно прожектора - это круг, верно? Или эллипс, если его под углом. Поэтому мне нужно было бы добавить сюда некоторый код, который бы сказал мне, где я в центре внимания (координаты xy). Я мог бы сопоставить эти координаты при поиске текстуры, соответственно уменьшить spotDiffuse и, надеюсь, получить рабочую проекцию гобо.

Как я могу рассчитать эти координаты относительно каждого источника света?

Или есть лучший способ реализовать легкие куки / гобо / легкие текстуры / легкие маски в Three.js? Я вижу, что это популярная функция в игровых движках, было бы неплохо иметь что-то подобное встроенным.http://docs.unity3d.com/Documentation/Components/class-Light.html довольно хорошо описывает то, что я ищу (части cookie).

Ответы на вопрос(1)

Ваш ответ на вопрос