iPhone OpenGL ES рисует красивые линии - PullRequest
3 голосов
/ 12 августа 2011

В моем приложении для iPhone нарисовано много линий.Увы, некоторые из них не являются ни вертикальными, ни горизонтальными, что означает, что они имеют неровные края.

Включение GL_LINE_SMOOTH, похоже, не имеет никакого эффекта.Мультисэмплированное сглаживание, как описано в документации Apple, работает, но я не могу себе представить, что невозможно сделать более привлекательные линии.При сглаживании линия становится гладкой, но цвет искажается по участкам линии.

Используя OpenGL, как можно нарисовать линию, которая выглядит как линия, нарисованная Quartz-2D, с гладкой границейцвет и переменная ширина?

(Для ясности, GL_LINE_WIDTH работает отлично, поэтому переменная ширина в настоящее время не является проблемой.)

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Это распространенная проблема в 3D-графике. Большинство графических карт обычно больше заботятся о скорости заполнения и скорости, чем о визуальном качестве в их базовой геометрии рендеринга. Они используют алгоритм Брезенхэма для рисования линий и полигонов, который не поддерживает сглаживание.

Выбор скорости, а не визуального качества на самом деле вполне оправдан для 3D API, поскольку большая часть визуальных деталей в конечном итоге возникает из-за использования текстур (которые интерполируются), а не из геометрии.

Мое предложение состояло бы в том, чтобы активировать множественную выборку или выполнить FSAA вручную, используя буфер накопления (если это доступно в OpenGL ES). Или вы можете попытаться нарисовать несколько линий с некоторой прозрачностью, искаженной вокруг предполагаемых координат.

0 голосов
/ 12 августа 2011

В дополнение к тому, что сказал Фабиан, может быть, вам просто нужно включить альфа-смешение для сглаживания линий, чтобы показать эффект, вызвав

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
...