Как добиться полного сглаживания сцены на iPhone

Я хотел бы получить FSAA в моем приложении OpenGL ES на iPhone.

В настоящее время я делаю это, создавая сцену текстуры, которая в два раза больше ширины и высоты экрана. Затем я использую функцию nice:

void glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height);

чтобы изменить размер изображения до разрешения экрана.

Есть ли лучший способ сделать это?

Обновление Bounty Added Мне было интересно, учитывая, что в январе 2010 года, есть ли лучший способ сделать это на телефонах 3G 3G и т.д.

Ответы

Ответ 1

Для Gran Turismo на PSP разработчики достигли эффекта, подобного сглаживанию, перемещая изображение назад и вперед на один пиксель на кадр (демонстрация можно найти здесь: http://www.gtplanet.net/why-gran-turismo-psp-looks-so-good/), поэтому, если iPhone не поддерживает то, что вы ищете, это вариант.

Ответ 2

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

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

Спасибо Bersaelor за указав это в другом вопросе SO.

Ответ 3

Технически iPhone GPU (PowerVR MBX Lite) должен поддерживать сглаживание. Однако, похоже, что нынешние драйверы Apple OpenGL ES (по состоянию на январь 2009 года) не раскрывают эту возможность. Так что делать "ручной АА" так же, как и вы, это единственный способ.