Как быстро нарисовать изогнутую форму?
«быстро» я предполагаю, что нужно максимально использовать аппаратные средства
под «изогнутыми» я подразумеваю границы, определенные либо квадратичными, либо кубическими кривыми Безье
под «формой» я подразумеваю либо «толстый» штрих (т. е. шириной более 1 пикселя), либо четно-нечетный / ненулевой заполненный «2D-изогнутый многоугольник», возможно, с отверстиями (т. е. буква «О»)
Я спрашиваю, потому что у вариантов, которые я знаю, есть несколько недостатков:
триангуляция формы и отправка ее в OpenGL - выполняет самую сложную работу с процессором и может использовать слишком много / мало треугольников (т. е. расточительно / грубо)
Атлас текстуры - должен пересчитывать / загружать текстуру при каждом изменении (форма, масштаб, поворот, ...)
Поле расстояния со знаком - в больших масштабах детали выглядят не очень красиво или должны пересчитать / загрузить текстуру
NV_path_rendering - могло бы быть, если бы он не работал только на картах Nvidia
OpenVG - могло бы быть, если бы он не работал только на мобильном телефоне
?
* Мне кажется, что OpenVG, мягко говоря, движется не совсем вперед. Кто-нибудь знает что-нибудь о его будущих перспективах? Стоит ли вообще следить за сегодняшним днем?
** OpenGL 4+ предоставляет возможность тесселяции полигонов на лету. Можно ли его как-то использовать для уточнения сетки из опции «триангуляция», чтобы граница формы, по крайней мере, не выглядела «под углом»?
источник
Ответы:
Вы можете использовать тесселяционные шейдеры OpenGl 4.x для преобразования контрольных точек Безье в полигоны.
Поиск в Google по запросу «shaz bezier тесселяции» обнаружил эту схему, описывающую тесселяцию поверхностей и кривых Безье:
http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf
Это переносит оценку Безье с ЦП на ГП и уменьшает поток данных по шине.
источник
Можно сделать изогнутый рисунок с помощью оборудования. В GPU Gems 3 описан метод , описывающий, как это сделать. Пользователь @yuriks фактически комментирует это. Я на самом деле сделал быстрое грязное демо для вас, чтобы посмотреть.
Рисунок 1 : HW ускоренное формирование кривой (нарисовано с использованием треугольника) и источник webgl
источник