我正在尝试使用 GLKView 将 OpenGL ES 内容覆盖在使用 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 对象的后面。创建增强现实效果。任何和所有的帮助将不胜感激!
麦克风