OpenGL сглаживание фигур на текстуре после ее создания

У меня есть прозрачная текстура OpenGL, на которой OpenGL нарисовал несколько простых фигур: круги, многоугольники, линии. Они отрисовываются без сглаживания, мультисэмплинга и т.п. Поэтому у них неровные границы.

У меня нет доступа к процессу создания текстур, поэтому я не могу включить мультисэмплинг. Есть ли способ сделать их гладкими ПОСЛЕ рисования?


person Predrag Manojlovic    schedule 08.03.2015    source источник


Ответы (1)


Существуют фильтры сглаживания на основе изображений, такие как FXAA и MLAA, которые будут работать в этой ситуации. Я не решаюсь назвать их сглаживанием, потому что они на самом деле не избегают сглаживания, они просто скрывают его постфактум. Они больше похожи на интеллектуальные фильтры размытия.

Из вашего другого вопроса я знаю, что вы не хотите использовать FBO, поэтому я считаю, что вы используете кодовую базу OpenGL 2.1 или более старую. FXAA можно реализовать в GLSL 1.20, но лучше он работает в 1.30 (GL 3.0). Единственное, о чем я не знаю, так это об использовании FXAA для изображения с прозрачностью, он ожидает, что яркость будет закодирована в альфа-канале (или sRGB, что не является функцией GL 2.1).

Вероятно, вы не захотите применять FXAA к своей текстуре напрямую, скорее вам нужно будет рисовать в PBuffer и применять FXAA после смешивания входной текстуры.

person Andon M. Coleman    schedule 09.03.2015
comment
Да, они не AA, но этот термин просто используется для объяснения того, что мне нужно :) Я могу использовать FBO, но не в процессе, который выполняется до создания текстуры. Так что, если это поможет постобработке, это нормально. Итак, если у меня есть такая текстура в FBO, как мне применить к ней FXAA? - person Predrag Manojlovic; 09.03.2015