3

ここに問題があります。私は、OpenGL ES を使用して iPhone で小さなプロジェクトに取り組んでいます。私は、Brad Larson のColorTracking アプリ(提供してくれた Brad に感謝します) から始めて、自分のニーズに合わせて調整しました。

すべてが正常に機能していますが、 で を使用するとkCVPixelFormatType_420YpCbCr8BiPlanarVideoRange、グレースケールの画像で作業するので色は必要ないため、画面上の結果の画像は y 軸に沿って変換され、画面外に出る部分は上部にレンダリングされます:kCVPixelBufferPixelFormatTypeKeyAVCaptureVideoDataOutput

スクリーンショットは次のとおりです。

ここに画像の説明を入力

もちろん、これを機能させるには、呼び出しのデータ型を から に変更する必要がありglTexImage2Dます。GL_RGBAGL_LUMINANCE

この動作は、キャプチャ セッションのGL_RGBAテクスチャを使用すると発生しません。kCVPixelFormatType_32BGRA

なぜこれが起こるのか、これを修正する方法を知っている人はいますか? どんな助けでも大歓迎です。

4

1 に答える 1

3

この問題の答えを見つけました:

glTextImage2Dの正しいベースアドレスを取得するには、呼び出しを変更する必要がありますCVImageBufferRef

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferWidth, bufferHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddressOfPlane(pixelBuffer));

// should become 

glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, bufferWidth, bufferHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0));

の場合kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange、輝度データを含む最初のプレーンを取得する必要があります。データ型はGL_LUMINANCEで、データ ポインタはCVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0)

于 2011-11-24T02:41:17.390 に答える