UIImagePickerController を使用してカメラからのライブ ビデオ フィードの上に、GLKView を使用して OpenGL ES コンテンツをオーバーレイしようとしています。いくつかのチュートリアル、本、投稿を読みましたが、まだ答えが見つかりません。参考までに、私が読んだ投稿のいくつかは、ここ、ここ、およびここにあります。
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 オブジェクトが 1 回レンダリングされることがわかります。しかし、UIImagePickerController がサブビューとして追加されると、それが画面上の唯一のものになります。最後の 3 行をコメント アウトすると、OpenGL オブジェクトはレンダリングされますが、もちろんカメラは表示されません。
描画している OpenGL オブジェクトの背後にカメラのビデオ イメージをレンダリングしたいと思います。拡張現実効果の作成。どんな助けでも大歓迎です!
マイク