Я пытаюсь наложить содержимое OpenGL ES, используя GLKView, поверх прямой видеотрансляции с камеры с помощью UIImagePickerController. Я прочитал несколько руководств, книг и сообщений, но до сих пор не могу найти ответ. К вашему сведению, некоторые из прочитанных мною сообщений: здесь, здесь и здесь.
В viewDidLoad я делаю следующее:
// Create an OpenGL ES 2.0 context and provide it to the view
// NOTE: viewOverlay is of class GLKView and a property of the view controller
viewOverlay.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
viewOverlay.opaque = NO;
viewOverlay.backgroundColor=[UIColor clearColor];
// Make the new context current
[EAGLContext setCurrentContext:viewOverlay.context];
// Create a base effect that provides standard OpenGL ES 2.0
// Shading Language programs and set constants to be used for
// all subsequent rendering
self.baseEffect = [[GLKBaseEffect alloc] init];
self.baseEffect.useConstantColor = GL_TRUE;
self.baseEffect.constantColor = GLKVector4Make(
1.0f, // Red
0.0f, // Green
0.0f, // Blue
1.0f);// Alpha
// Set the background color stored in the current context
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // background color
И в viewDidAppear я делаю это:
UIImagePickerController *uip;
uip = [[UIImagePickerController alloc] init];
uip.sourceType = UIImagePickerControllerSourceTypeCamera;
uip.showsCameraControls = NO;
uip.toolbarHidden = YES;
uip.navigationBarHidden = YES;
uip.wantsFullScreenLayout = YES;
uip.cameraViewTransform = CGAffineTransformScale(uip.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM);
[viewOverlay addSubview:uip.view];
[viewOverlay sendSubviewToBack:uip.view];
[viewOverlay bringSubviewToFront:viewOverlay];
Если я пройдусь по программе, я увижу, что объекты OpenGL рендерятся один раз. Но когда UIImagePickerController добавляется в качестве подпредставления, это единственное, что отображается на экране. Если я закомментирую последние три строки, объекты OpenGL будут отображаться, но, конечно, камера не будет видна.
Я бы хотел, чтобы видеоизображение с камеры отображалось позади объектов OpenGL, которые я рисую. Создание эффекта дополненной реальности. Любая помощь будет принята с благодарностью!
Майк