сглаживание iPhone OpenGLES - PullRequest
       38

сглаживание iPhone OpenGLES

5 голосов
/ 10 февраля 2010

Мне нужно сглаживание в iPhone 3G (OpenGL ES1.1), а не iPhone 3Gs с OpenGL ES.2.0. Я нарисовал 3d-модель и получил следующее: пиксели по краям модели выглядят как зубы.

Я попытался установить любые фильтры для текстуры, но эти фильтры заставляют ТОЛЬКО текстуру ВНУТРИ выглядеть лучше.

Как мне сделать хороший антиалисинг? Может быть, я должен использовать любой гладкий для рисования треугольников? Если да, то как это возможно в OpenGL ES1.1?

спасибо.

Ответы [ 4 ]

8 голосов
/ 05 ноября 2010

Начиная с iOS 4.0, полноэкранное сглаживание напрямую поддерживается через расширение Apple до OpenGL. Основная концепция аналогична предложению эпателя: визуализировать сцену в больший кадровый буфер, а затем скопировать вплоть до кадрового буфера размером с экран, затем скопируйте этот буфер на экран. Разница заключается в том, что вместо создания текстуры и ее рендеринга в квад, операция копирования / выборки выполняется одним вызовом функции (в частности, glResolveMultisampleFramebufferAPPLE()).

Для получения подробной информации о том, как настроить буферы и изменить код для рисования, вы можете прочитать учебник в блоге Gando Games , который написан для OpenGL ES 1.1; * * * * * * * * * * * * * * * * * * * * * * * * * * на форумах разработчиков Apple .

Спасибо Берсаелору за , который указал на это в другом вопросе .

4 голосов
/ 11 февраля 2010

Вы можете сделать рендеринг в более крупном FBO, а затем использовать его в качестве текстуры на квадрате.

Посмотрите на эту статью для объяснения.

2 голосов
/ 12 марта 2011

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

Преимущество этого подхода заключается в том, что вы не рендерите изображение большего размера, не копируете буфер, или, что еще хуже, не создаете текстуру из буфера, так что это не влияет на производительность.

2 голосов
/ 10 февраля 2010

Проверьте параметры EGL_SAMPLE_BUFFERS и EGL_SAMPLES для eglChooseConfig () , а также glEnable (GL_MULTISAMPLE) .

РЕДАКТИРОВАТЬ: Хм, очевидно вам не повезло, по крайней мере, насколько стандартизированные подходы идут. Как упоминалось в этом потоке, вы можете визуализировать большую текстуру за пределами экрана и масштабировать ее до меньшего квадратного квадрата или несколько раз дрожать в матрице вида.

...