Используя GLES2.0, я пытаюсь создать точечные спрайты, которые «зажимают» текстуру вниз или вверх на основе самых низких / самых высоких значений пикселей формы после ее преобразования.Его форма зависит от текущего угла (одинакового для всех спрайтов), его радиуса и глубины (атрибуты вершин).
Я успешно реализовал желаемый эффект, однако он работает медленно, и я знаю, что должно бытьболее простой способ сделать это.
По сути, я хочу, чтобы значение спрайтов y было ниже порога (определяемого его формой), он просто копирует цвет предыдущего пикселя вниз, пока не достигнет второго порога.
В этом примере с шейдертой показан эффект и то, как я его реализовал (в частности, с нижней функцией)
Пример с шейдертой.Используйте мышь, чтобы переместить фигуру
Как видите, пиксели повторяются вниз / вверх независимо от ориентации фигур - независимо от того, что находится внизу прямоугольника со скругленными углами (или зависит от прямоугольника или круга)на константу 'r') просто копируется.Мой метод состоял в том, чтобы использовать кусочную функцию, которая вычисляет край фигуры после ее преобразования.Форма всегда будет закругленным прямоугольником с радиусом от 0 (прямоугольник) до 1 (круг).К сожалению, это требует большого количества вычислений.
Я попытался изменить значения, которые не зависят от 'x', на значения в вершинном шейдере, которые затем передаются во фрагментный шейдер, поэтому их нужно вычислять только для-vertex - однако не было буквально никаких изменений в производительности (Пропускает оптимизация компилятора GL)
Для справки, ~ 100 из этих точечных спрайтов рисуются одновременно на экране - атрибуты вершины для каждого - это позиция,радиус, глубина и координата смещения для атласа текстуры.В примере с шедертой используется только одна текстура.
Как этот эффект можно реализовать более эффективно?(Либо в самом шейдере, либо с использованием других функциональных возможностей OpenGL). Будет ли запись и чтение нижних пикселей в 1D текстуру быстрее?Есть ли способ манипулировать цветовым буфером, чтобы повторить цвет вниз?Я чувствую, что изменение формы на сквиклер, а не на скругленный прямоугольник, позволит быстрее вычислить нижний край, однако я хочу иметь возможность использовать квадраты, круги и все, что между ними, и лично я уверен, что метод поисканижний край с получением текстуры (независимо от формулы, определяющей нижний край) менее эффективен, чем какой-либо метод копирования пикселей вниз или вверх, если нет значения ниже или выше.
Редактировать: следует липовторение вверх или вниз зависит от угла, как показано в примере, но процесс, очевидно, будет таким же.
Заранее спасибо, если кто-нибудь может помочь