2012-04-24 16 views
0

アップルのRosyWriterサンプルアプリケーションと同様に、テクスチャキャッシュを使用して画面にビデオフレームを描画しています。iOS 5.0でのミップマップフィルタリングの使用OpenGL ES 2.0テクスチャキャッシュ

イメージを1080pから320x480にダウンサンプリングしたいのです(さまざまな理由で、より低い解像度でキャプチャしたくありません)。ミップマップフィルタリングを使用してエイリアシングを取り除きます。しかし、私が追加しようとすると:

glGenerateMipmap(CVOpenGLESTextureGetTarget(inputTexture)); 
glTexParameteri(CVOpenGLESTextureGetTarget(inputTexture), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

私はちょうどミップマップが生成されていないように黒い画面が表示されます。あるテクスチャから別のテクスチャにオフスクリーンをレンダリングしています。テクスチャキャッシュを使用して、ソースとデスティネーションの両方がピクセルバッファにマッピングされます。

答えて

2

ミップマップは、2のべき乗のサイズのテクスチャに対してのみ生成されます。私が考えることができるiOSカメラから返されるビデオフレームのサイズはどれも2のべき乗の次元ではありません。まだミップマップを生成している間にテクスチャキャッシュを使用するには、テクスチャに裏打ちされた2の累乗のFBOにテクスチャのオフスクリーン再レンダリングを行い、そのためのミップマップを生成する必要があると思います。

これは、おそらくあなたが望むものを達成するための最良の方法ではないと言いました。ミップマップは、テクスチャを画面上で小さくし、大きくしない場合にのみ役立ちます。また、実行時に生成するのがかなり遅いため、ビデオ処理全体がダウンすることになります。

ズームイン時にどのようなエイリアシングが見られますか?通常のハードウェアテクスチャフィルタリングでは、ビデオフレームをズームインすると、適度に滑らかな画像が生成されます。その一例として、私のGPUImageフレームワークのFilterShowcaseサンプルをつかんで実行し、Cropフィルタを見てください。このようにビデオの一部をズームインすると、ハードウェアフィルタリングを使用するだけで、うまくスムーズに動き出すようです。

フレームワークの大きな画像をスムーズにダウンサンプリングするためにミップマップを採用しています(smoothlyScaleOutputがYESに設定されている場合はGPUImagePictureを参照してください)が、画像を縮小して拡大しないでください。

+0

こんにちはブラッド、私の謝罪、質問は混乱していた - 私は理にかなって編集しました。私はズームイン機能を追加していますが、これはポイントの外にあります。この問題は、ズームアウトして画像をダウンサンプリングしているときに実際に発生し、より簡単にストリーミングできるようになります。リージョンをズームインすることができるのは、元のキャプチャ解像度を単純に下げることができず、ソフトウェアで手動でダウンサンプリングする必要があるということだけが関係しているからです。 – chris838

+0

エイリアシングを除去するには、シェーダ内の画像をローパスフィルタリングすれば十分ですか?私はすでに、フレームバッファなどの書き込み用に定型コードを用意しています。 – chris838

+1

@ chris838 - 他のものを探しているうちに、私は今日これを見つけました:http://mobile3dgraphics.blogspot.com/2011/04/mipmapping- and-npot-textures-inside.htmlでは、NPOTテクスチャ上の3線フィルタリングの実装について説明しています。それは、あなたのケースでスムーズなダウンサンプリングを実現するのに役立ちます。 –

関連する問題