Ski*_* M2 5 iphone opengl-es avcapturesession
这主要与增强现实类型应用相关.Apple提供了有关如何使用AVCaptureSession捕获视频帧(并在需要时将其另存为图像)的信息:
http://developer.apple.com/library/ios/#qa/qa2010/qa1702.html
我知道可以在捕获的视频帧中创建一个openGL纹理,然后将其用作openGL视图中的背景,覆盖其他图形.
我想知道这种方法是否有其他选择?上面提到的方法可能是最好的(我不知道是不是),但是如果有其他方法可以尝试,那将是很好的.例如,有没有办法直接在AVCaptureVideoPreviewLayer上覆盖openGL视图?
您确实可以通过AVCaptureVideoPreviewLayer等方式对OpenGL内容进行分层,但您的性能会受到影响.Apple强烈建议您不要将非不透明的OpenGL ES内容叠加在其他显示元素之上.从适用于iOS的OpenGL ES编程指南:
为了获得绝对最佳性能,您的应用程序应仅依靠OpenGL ES来呈现您的内容.为此,请调整包含CAEAGLLayer对象以匹配屏幕的视图,将其opaque属性设置为YES,并确保没有其他Core Animation图层或视图可见.如果您的OpenGL ES图层在其他图层之上合成,则使您的CAEAGLLayer对象不透明会降低但不会消除性能成本.
如果您的CAEAGLLayer对象在图层层次结构中混合在其下面的图层之上,则渲染缓冲区的颜色数据必须采用预乘Alpha格式才能由Core Animation正确合成.将OpenGL ES内容混合到其他内容之上会严重影响性能.
老实说,将视频作为纹理拉入并将其显示为3-D叠加层背后的广告牌并不难.我的示例应用程序此处确实相机视频的直通到一个OpenGL ES(2.0)纹理显示在屏幕上.只需进行一些修改,您就可以在其上放置3-D内容.这将比尝试在AVCaptureVideoPreviewLayer上绘制非不透明的3-D内容提供更好的性能.
但是,如果你只是想显示在OpenGL ES的内容简单的静态UIViews,可没有多少性能上的损失(〜在帧率减少5%,以我的经验)来完成.
| 归档时间: |
|
| 查看次数: |
5407 次 |
| 最近记录: |