Obliczanie pozycji na stożku reflektora w cieniowaniu Phonga

Usiłuję zaimplementować lekkie pliki cookie (lub gobo lub lekkie tekstury lub maski świetlne) dla THREE.SpotLight w PhongMaterial w WebGLRenderer. Celem jest dołączenie tekstury dla światła, coś takiego:http://www.idjnow.com/ProductImagesLarge/GOBO-GLASS1C.jpg Tekstura obniżyłaby intensywność światła, tworząc projekcję podobną do cienia.

Sądzę, że mam „dołączanie tekstury do światła i przekazywanie jej jako jednolitego dla wyszukiwania w shaderze”, chociaż nie udało mi się tego przetestować, ponieważ mam problemy z obliczeniem mojej pozycji w świetle reflektora / stożku.

Widzę, że obliczany jest tutaj niewielki wkład reflektorów (modyfikuję źródło Three.js bezpośrednio, zamiast tworzyć własny materiał):

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

Miejscem reflektora jest koło, prawda? Lub elipsę, jeśli jest pod kątem. Więc musiałbym dodać jakiś kod tutaj, który powiedziałby mi, gdzie jestem w miejscu reflektora (współrzędne xy). Mógłbym zmapować te współrzędne przy wyszukiwaniu tekstury, odpowiednio obniżyć spotDiffuse i mam nadzieję, że będzie działać rzut gobo.

Jak mogę obliczyć te współrzędne w odniesieniu do każdego światła?

A może jest lepszy sposób na wdrożenie lekkich ciasteczek / gobo / tekstur świetlnych / masek świetlnych w Three.js? Widzę, że jest to popularna funkcja w silnikach gier, byłoby miło mieć coś takiego.http://docs.unity3d.com/Documentation/Components/class-Light.html opisuje całkiem dobrze to, czego szukam (części cookie).

questionAnswers(1)

yourAnswerToTheQuestion