Проблема с качеством изображения на сетчатке - PullRequest
6 голосов
/ 03 февраля 2011

Я пытался настроить приложение OPENGL ES на отображение сетчатки.Я добавил изображение с расширением @ 2x и увеличил коэффициент масштабирования до 2. Изображение с высоким разрешением корректно отображается на экране, но оно теряет качество.Края и размытые и не имеющие качества изображения я добавил в папку ресурсов.

Как я могу это исправить?

Ответы [ 3 ]

5 голосов
/ 08 апреля 2011

Мое приложение основано на платформе по умолчанию, и у меня возникла эта проблема при работе на устройстве на основе Retina.В частности, мой кадровый буфер создавался с разрешением 320х480, а не 640х960, как я хотел.Извините, Джеймс, но это НЕ автоматически, потому что проблема с кадровым буфером, созданным renderBufferStorage: fromDrawable: (который вызывает glRenderbufferStorage от нашего имени, но определяет пиксели макета, а не собственные пиксели устройства для ширины и высоты по умолчанию).

Я добавил следующий код под строками строки, которые устанавливают eaglLayer.drawableProperties в initWithCoder: в EAGLView.m :

UIScreen *mainScreen = [UIScreen mainScreen];
if ([mainScreen respondsToSelector:@selector(scale)])
{
    // iOS 4.0 and up (further to simeon's comment)
    const CGFloat scale = mainScreen.scale;
    self.contentScaleFactor = scale;
    eaglLayer.contentsScale = scale;
}

Спасибо сообщению Дэвида Амадора за то, что он указал мне правильное направление.Спасибо, совсем недавно, за полезные комментарии Симеона.

1 голос
/ 10 марта 2012

В вашем EAGLView.m initWithCoder: метод добавьте следующий код:

if( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] )
{
    self.contentScaleFactor = [[UIScreen mainScreen] scale];   
}
0 голосов
/ 03 февраля 2011

OpenGLES будет отображаться с максимально возможным разрешением на дисплее сетчатки автоматически (если вы установили в окне просмотра ширину и высоту экрана и т. Д. И т. Д.), Поэтому проблема связана с рендерингом OpenGL.*

OpenGLES не заботится о суффиксе @ 2X, который вы добавили к изображению (это для платформ Cocoa Touch).Это, однако, заботится о разрешении изображения.Для достижения наилучших результатов вы должны использовать квадратные изображения шириной и высотой, которые имеют степень двойки (например, 1024, 2048 и т. Д.).

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

Другая вещь, с которой вам следует поэкспериментировать, это параметры текстуры.Например:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

Надеюсь, это направит вас в правильном направлении.

...