Я намагаюся змусити цей шейдер запустити справді старий iDevice, а також з часом Андроїди.
Навіть коли я знижую код до 2-х синусових функцій на фрагмент, шейдер працює приблизно в 20 кадрів в секунду.
Я розглядав можливість вивести аркуш із книги старих методів затінення та створити масив, який містить купу заздалегідь заданих значень триггеру і якось використовує їх для наближення шейдера.
У шейдері, який я зв'язав вище, я вже імітую, що шляхом округлення значень, відправлених до функції триггера, далі миша ліворуч (вниз) переходить на меншу якість шейдера. Насправді це дуже круто, бо дійсно близько до лівої сторони це схоже на зовсім інший і досить крутий шейдер.
У всякому разі, у мене є дві дилеми:
- Я не знаю, який найефективніший спосіб мати масив приблизно 360 значень у ньому в шейдері GLSL, постійному чи рівномірному?
Я не можу зрозуміти, як поставити число в діапазон, як зазвичай, якби я хотів кут між 0 і 360 (так, я знаю, що графічні процесори використовують радіани), я би зробив це так.
func range(float angle) { float temp = angle while (temp > 360) {temp -= 360;} while (temp < 0) {temp += 360;} return temp; }
Однак GLSL не дозволяє виконувати функції циклів або рекурсивних функцій.
mod
функція - це те, що ви хочете. Ви б написали mod(angle, 360.0)
.