Прозрачный OpenGL

от автора

image

Бон Джорно, сеньоры!
Я перевыпустил древнюю игру Dice 5, с которой собственно и начинал жизнь в необычном мире iOS разработки.
Хочу поделиться полезным для многих режимом накладывания трехмерных объектов на стандартные красивые элементы управления и шрифты iOS.

В качестве десерта я расскажу о процессе одобрения игры в яблочном магазине и слежки за сотрудниками Apple Review Team. Вдруг кому пригодится?
В статье будет много иностранных вордсов, потому что меня просто прет использовать их после запрета от нашей ГД.

Пример кода

Необходимо создать прозрачный слой трехмерной графики и наложить его на классический UIView.
В выбранном Вами UIViewControllere в тело функции viewDidLoad вставляете код

#import "PlayViewController.h"  @interface PlayViewController () {     GLKView *glkView;     EAGLContext *context; }  - (void)viewDidLoad {     [super viewDidLoad];  // это так надо всегда  // инициируем две переменные, которые подарят нам OpenGL ES1 а можно ES2     context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];     if (!context) {         NSLog(@"Unable to create OpenGL context");         exit(1);     }     [EAGLContext setCurrentContext:context];     glkView = [[GLKView alloc] initWithFrame:self.view.frame ];     glkView.context = context;   // делаем вот такую штуку для прозрачности //       CAEAGLLayer *v = (CAEAGLLayer *)glkView.layer;     v.opaque = NO;     v.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:                                     kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];   //  добавляем к нашему UIView опенжлный glkView //         [self.view addSubview:glkView];  // делаем , чтобы он пропускал нажатия    //     glkView.userInteractionEnabled = NO;      }    

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

    glViewport(0, 0, Width, Height);     glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // таким образом мы не затираем все то, что находится под графическим слоем     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

Просто, но важен порядок действий.

Все работает согласно документации iOS и OpenGL ES до тех пор, если Вы не начнете применять внутренний буффер для антиалайсинга.
Прозрачные тени приобретут ненужный цвет, что является ошибкой. Возможно в iOS 8 это будет исправлено.

Публикация

Как говорили большевики, лето — мертвый сезон для игр. Сотрудники Apple одобрили программу за 2 дня. Судите сами, в четверг я выложил приложение для проверки, уже в субботу пришел okey. При этом Apple Review Team честно запустило в пятницу вечером игру на своих пяти устройствах. Если они проверяют нас, почему бы нам не проверять их?

Вот список Apple устройств
image

Внимательно приглядитесь, Review Team запустило приложение Dice 5 на двух iPad, iPad Mini, iPhone 4S и iPhone 5S.
Судя по времени запуска, в Apple это происходит автоматически, а поутру сотрудники получают уведомление о поступлении новых приложений для проверки.

Вот таблица рекордсменов на сегодняшний день — среди них только 2 хабражителя.
image

Всем спасибо и хороших выходных.

ссылка на оригинал статьи http://habrahabr.ru/company/papabubadiop/blog/228861/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *