...

воскресенье, 6 июля 2014 г.

Прозрачный 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


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий