2012-07-23 77 views
2

AR(增強現實)似乎是所有iOs開發人員今天都在關注的。我正在玩一個非常經典的寵物項目,用紋理擲骰子,如果可能的話,在骰子面上拍攝相機流。我面臨着最後一部分的幾個問題,我對專家的一些問題:增強現實:OpenGL視圖上的相機流

獲取視頻流需要AV基金會:AVCaptureVideoDataOutputSampleBufferDelegate獲得的圖像緩衝區中,然後用石英之類的函數CGBitmapContextCreate建立UIImage。這表現在http://www.benjaminloulier.com/articles/ios4-and-direct-access-to-the-camera或蘋果AV基金會編程指南(見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演示使用核心視頻CVOpenGLESTextureCacheCreateTextureFromImage函數直接綁定紋理而不創建中介UIImage。這是 - 如演示描述中所述 - IOS 5中的新增內容。

問題2:這是映射紋理的更好方法嗎?

問題3:有一些有趣的框架,比如GPUImage,甚至可以使用3D遊戲框架。有沒有人使用這些反饋?到目前爲止,蘋果提供的框架看起來相當完整。

非常感謝!

回答

3

在回答您的各種問題:

GLKBaseEffect似乎非常好的和簡單,但我的目標應該是 的OpenGL 2和着色器?

GLKBaseEffect只是一些簡單的OpenGL ES 2.0着色器的包裝,所以它的核心是2.0。雖然GLKit提供了一些很好的方便,但最終您需要創建它默認不能提供的效果,因此您很可能需要學習如何在某個點執行自己的頂點和片段着色器。我列出了一些在this answer中學習這些資源的資源。

現在從蘋果RosyWriter演示使用的核心視頻 CVOpenGLESTextureCacheCreateTextureFromImage功能綁定直接 紋理,而無需創建一箇中介的UIImage。這是 - 如演示描述中所述的 - IOS 5中的新增內容。

問題2:這是映射紋理的更好方法嗎?

是的,在iOS 5.0上,使用紋理緩存上傳視頻幀可以帶來一些穩定的性能改進。對於iPhone 4S,當使用紋理緩存時,我看到幀上傳時間從640 x 480幀的9.3 ms下降到1.8 ms。 reading from the texture caches to encode video有更大的好處。

問題3:有幾個有趣的框架,比如GPUImage,或者甚至可以使用的3D Gaming框架。有沒有人有使用這些的一些反饋意見 ?到目前爲止,蘋果提供的框架似乎完全符合我的要求。

我會建議使用GPUImage這個,但我有點偏見,看我如何寫它。作爲更具體的一點,我幾乎完全按照該框架的示例代碼中CubeExample的描述(讀取視頻幀並將它們映射到旋轉立方體的側面)。

這個例子稍微複雜一些,因爲我通過一個棕褐色色調過濾器運行它,將它作爲紋理讀取並顯示在可用手指旋轉的三維立方體上,並且然後通過像素化過濾器獲取立方體的渲染視圖。但是,您可以從此示例中提取所需的部分。通過這樣做,您將節省大量代碼,因爲我負責視頻捕獲並上傳到OpenGL ES。

+0

非常感謝布拉德。事實上,CubeExample項目就是一個很好的例子。 – lazi74 2012-07-25 09:50:43