2

AR (拡張現実) は、現在すべての iOS 開発者が注目しているようです。私は非常に古典的なペット プロジェクトで遊んでいます。サイコロをテクスチャで転がし、可能であればカメラ ストリームをサイコロ面に流します。この最後の部分でいくつかの問題に直面しており、専門家にいくつか質問があります。

ビデオ ストリームを取得するには、AV Foundation が必要ですAVCaptureVideoDataOutputSampleBufferDelegate。画像バッファを取得してから、UIImageQuartz のような関数を使用して構築しCGBitmapContextCreateます。これは、 http://www.benjaminloulier.com/articles/ios4-and-direct-access-to-the-cameraまたは Apple 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 とシェーダーを目指すべきですか?

現在、Apple の RosyWriter デモでは、Core VideoCVOpenGLESTextureCacheCreateTextureFromImage関数を使用して、仲介者を作成せずにテクスチャを直接バインドしていUIImageます。これは、デモの説明で述べたように、IOS 5 の新機能です。

質問 2: これはテクスチャをマッピングするためのより良い方法ですか?

質問 3: GPUImage や 3D ゲーム フレームワークなど、いくつかの興味深いフレームワークも使用できます。これらの使用に関するフィードバックはありますか? Apple が提供するフレームワークは、これまでのところ非常に完成度が高いように思えます。

どうもありがとう !

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 ミリ秒から 1.8 ミリ秒に短縮されました。テクスチャ キャッシュから読み込んでビデオをエンコードすると、さらに大きなメリットが得られます。

質問 3: GPUImage や 3D ゲーム フレームワークなど、いくつかの興味深いフレームワークも使用できます。これらの使用に関するフィードバックはありますか? Apple が提供するフレームワークは、これまでのところ非常に完成度が高いように思えます。

これには GPUImage を使用することをお勧めしますが、私がどのように書いたかを見ると、少し偏っています。より具体的なポイントとして、そのフレームワークのサンプルコード内の CubeExample で説明したこと(ビデオフレームを読み取り、回転する立方体の側面にマッピングすること)をほぼ正確に行います。

この例はもう少し複雑です。ライブ ビデオを撮影し、セピア トーン フィルターにかけ、それをテクスチャとして読み取り、指で回転できる 3D 立方体に表示してから、レンダリングしたものを取得します。立方体のビューは、ピクセレーション フィルターを通過します。ただし、この例から必要な部分だけを抽出できます。これにより、ビデオのキャプチャと OpenGL ES へのアップロードは私が行うため、多くのコードを節約できます。

于 2012-07-24T15:02:55.320 に答える