2012-05-02 4 views
7

Я ищу совет, прежде чем углубляться в свой следующий проект. Я хотел бы поддержать все различные резолюции, которые теперь поддерживаются iOS (сетчатка, не-сетчатки iPhone и все 3 iPads).Разработка для дисплеев Retina и non-retina OpenGL ES

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

Является ли конкретный переключатель устройства или стандартными для операторов?

Спасибо за помощь в продвинутом виде.

E

Edit: я нашел это от Apple:

Blockquote Если ваше приложение использует OpenGL ES для рендеринга, существующий код рисунок должен продолжать работать без каких-либо изменений. Однако, когда вы нарисованы на экране с высоким разрешением, ваш контент масштабируется соответствующим образом и будет казаться более блочным. Причиной для блочного внешнего вида является то, что поведение по умолчанию класса CAEAGLLayer, которое вы используете для резервного копирования рендеринга OpenGL ES, такое же, как и другие объекты слоя Core Animation. Другими словами, его масштабный коэффициент первоначально установлен на 1.0, что заставляет компоновщик Core Animation масштабировать содержимое слоя на экранах с высоким разрешением. Чтобы избежать этого блочного внешнего вида, вам необходимо увеличить размер ваших рендеринговых буферов OpenGL ES в соответствии с размером экрана. (С большим количеством пикселей вы можете увеличить количество деталей, которые вы предоставляете для своего контента.) Поскольку добавление большего количества пикселей в ваши рендерингбуферы имеет последствия для производительности, вы должны явно выбрать поддержку экранов с высоким разрешением.

Blockquote Чтобы включить чертеж с высоким разрешением, вы должны изменить масштабный коэффициент представления, которое вы используете, чтобы представить свой контент OpenGL ES. Изменение свойства contentScaleFactor вашего представления от 1.0 до 2.0 приводит к соответствующему изменению масштабного коэффициента для базового объекта CAEAGLLayer. Метод renderbufferStorage: fromDrawable: метод, который вы используете для привязки объекта layer к вашим рендерингбуферам, вычисляет размер renderbuffer, умножая границы слоя на его масштабный коэффициент. Таким образом, удвоение масштабного коэффициента удваивает ширину и высоту получаемого рендеринга, что дает вам больше пикселей для вашего контента. После этого вы должны предоставить контент для этих дополнительных пикселей.

Таким образом, я думаю, что мой обновленный вопрос: как удвоить масштабный коэффициент, описанный выше?

Edit 2:

Я почти там ...

Я использую это для масштабирования внутри моего EAGLView:

 // Adjust for retina displays 
    if ([self respondsToSelector:@selector(setContentScaleFactor:)]) 
    { 
      self.contentScaleFactor = [[UIScreen mainScreen] scale]; 
    } 

Единственная проблема, которая в настоящее время остается происхождение каким-то образом перепутались. Отображение изображений теперь масштабируется в соответствии с разрешением, но при большем разрешении изображение начинается в середине экрана.

Пожалуйста, помогите!

Редактировать 3: Решено !!!! Я испытывал проблемы в своей ориентации.

Вам необходимо убедиться, что ваш перевод обновлен.Я использовал это:

glTranslatef(width/2, height /2, 0); 
glRotatef(-90, 0, 0, 1); 
glTranslatef(-1 * (height/2),-1 * (width/2),0); 

Спасибо за внешность. Я надеюсь, что это помогает кому-то.

+0

Любой удачи с заходящим conten tScale = 2 на iPad3 для поддержки сетчатки? http://stackoverflow.com/questions/11276027/where-to-start-with-an-opengl-painter-for-the-retina-display –

+0

Я еще не пробовал показ iPad Retina. Когда я это сделаю, я снова коснусь его. –

ответ

2

Смотрите руководство вида программирования: Просмотр геометрию и системы координат

http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html

координаты значений представляются с использованием чисел с плавающей точкой, который обеспечивать точное расположение и позиционирование контента независимо от разрешения на основной экран

Тха t означает, что указанная вами точка (GCRect и т. д.) не является пикселем - это точка, которая корректируется для сетчатки/не-сетчатки

Наконец, как отметил священник Какао, вы можете поддерживать изображения png и * @ 2x. PNG версия изображений:

Retina Display Images on iPhone

What is the point of the @2x for Retina display apps?

Кроме того, вот статья по проектированию для сетчатки: http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml

+2

Я ценю ответ. Я обязательно прочитаю об этом руководстве. Я не думаю, что это сработает для меня (может быть, ошибочно). Как я уже упомянул, все мои изображения взяты из OpenGL ES, а не UIKit. –

-2

Вам просто нужно иметь @ 2x-версии изображений в вашем комплекте. IOS автоматически принимает @ 2x-версию, если он работает на сетчатку аппаратных