2

AR(增强现实)似乎是当今所有 iO 开发人员都在关注的东西。我正在玩一个非常经典的宠物项目,用纹理滚动骰子,如果可能的话,将相机流放在骰子面上。我在最后一部分面临一些问题,我有一些问题要问专家:

获取视频流需要 AV Foundation :AVCaptureVideoDataOutputSampleBufferDelegate获取图像缓冲区,然后构建UIImage使用 Quartz 函数,如CGBitmapContextCreate. 这在http://www.benjaminloulier.com/articles/ios4-and-direct-access-to-the-camera或苹果 AV Foundation Programming Guide 中进行了演示(参见https://developer.apple.com/library /ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW30

然后我可以像为“静止”图像所做的那样创建纹理,并将其与GLKBaseEffect(或着色器?)一起使用。

问题 1:GLKBaseEffect看起来非常好和简单,但我应该瞄准 OpenGL 2 和着色器吗?

现在来自苹果的 RosyWriter 演示使用 Core VideoCVOpenGLESTextureCacheCreateTextureFromImage功能直接绑定纹理,无需创建中介UIImage。这是 - 如演示描述中所述 - IOS 5 中的新功能。

问题 2:这是映射纹理的更好方法吗?

问题 3:有一些有趣的框架,比如 GPUImage,甚至 3D Gaming 框架也可以使用。有人对使用这些有什么反馈吗?到目前为止,苹果提供的框架对我来说似乎很完整。

非常感谢 !

4

1 回答 1

3

针对您的各种问题:

GLKBaseEffect 看起来非常好和简单,但我应该瞄准 OpenGL 2 和着色器吗?

GLKBaseEffect 只是一些简单的 OpenGL ES 2.0 着色器的封装,因此它的核心使用 2.0。虽然 GLKit 提供了一些很好的便利,但最终您将需要创建默认情况下无法提供的效果,因此您很可能需要在某个时候学习如何制作自己的顶点和片段着色器。我在这个答案中列出了一些学习这些资源的资源。

现在来自 Apple 的 RosyWriter 演示使用 Core Video CVOpenGLESTextureCacheCreateTextureFromImage 函数直接绑定纹理,而无需创建中间 UIImage。这是 - 如演示描述中所述 - IOS 5 中的新功能。

问题 2:这是映射纹理的更好方法吗?

是的,在 iOS 5.0 上,使用纹理缓存上传视频帧可以带来一些可靠的性能改进。对于 iPhone 4S,使用纹理缓存时,我看到帧上传时间从 640x480 帧的 9.3 ms 下降到 1.8 ms。从纹理缓存中读取以编码视频时,还有更大的好处。

问题 3:有一些有趣的框架,比如 GPUImage,甚至 3D Gaming 框架也可以使用。有人对使用这些有什么反馈吗?到目前为止,苹果提供的框架对我来说似乎很完整。

我建议为此使用 GPUImage,但我有点偏见,看看我是如何写的。作为更具体的一点,我在该框架的示例代码中的 CubeExample 中几乎完全按照您的描述(读取视频帧并将它们映射到旋转立方体的侧面)。

这个例子有点复杂,因为我拍摄实时视频,通过棕褐色色调过滤器运行它,将其作为纹理读取并将其显示在可以用手指旋转的 3-D 立方体上,然后获取渲染立方体的视图通过像素化过滤器运行。但是,您可以仅从该示例中提取您需要的部分。通过这样做,您将节省大量代码,因为我会为您处理视频捕获和上传到 OpenGL ES。

于 2012-07-24T15:02:55.320 回答