iPhone OpenGL ES рисует красивые линии
В моем приложении для iPhone много линий нарисовано. Увы, некоторые из них не являются ни вертикальными, ни горизонтальными, что означает, что они имеют неровные края.
Включение GL_LINE_SMOOTH, похоже, не имеет никакого эффекта. Мультисэмплированное сглаживание, как описано в документации Apple, работает, но я не могу представить, что невозможно сделать более привлекательные линии. При сглаживании линия становится гладкой, но цвет искажается по участкам линии.
Используя OpenGL, как вы можете нарисовать линию, которая выглядит как линия, нарисованная Quartz-2D, с гладкой границей, постоянным цветом и переменной шириной?
(Для ясности, GL_LINE_WIDTH работает отлично, поэтому переменная ширина в настоящее время не является проблемой.)
2 ответа
Это распространенная проблема в 3D-графике. Большинство графических карт обычно больше заботятся о скорости и скорости заполнения, чем о визуальном качестве в их базовой геометрии рендеринга. Они используют алгоритм Брезенхэма для рисования линий и многоугольников, который не поддерживает сглаживание.
Выбор скорости, а не визуального качества на самом деле вполне оправдан для 3D API, так как большая часть визуальных деталей в конечном итоге возникает из-за использования текстур (которые интерполируются), а не из-за геометрии.
Я бы предложил активировать мультисэмплирование или выполнить FSAA вручную, используя буфер накопления (если это доступно в OpenGL ES). Или вы можете попытаться нарисовать несколько линий с некоторой прозрачностью, искаженной вокруг предполагаемых координат.
В дополнение к тому, что сказал Фабиан, возможно, вам просто нужно включить альфа-смешение для плавной линии, чтобы показать эффект, вызвав
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);