AVPlayer から CVPixelBufferRef を取得して、2D オブジェクトのテクスチャに使用できるピクセル データを供給することができました。ピクセルバッファにデータがある場合、次のようにします。
CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage('
kCFAllocatorDefault,
videoTextureCache_,
pixelBuffer, //this is a CVPixelBufferRef
NULL,
GL_TEXTURE_2D,
GL_RGBA,
frameWidth,
frameHeight,
GL_BGRA,
GL_UNSIGNED_BYTE,
0,
&texture);
このバッファを使用して GL_TEXTURE_CUBE_MAP を作成したいと思います。私のビデオ フレーム データは、実際には 1 つの画像 (キューブ ストリップなど) の 6 つのセクションであり、合計で立方体の側面を構成します。これを行う方法について何か考えはありますか?
GL_TEXTURE_2D が GL_TEXTURE_CUBE_MAP であるふりをして、スカイボックスのテクスチャを上記のコードで生成されたテクスチャに置き換えることを考えていましたが、これにより歪んだ混乱が生じます (スカイボックスに強制的にテクスチャを付けようとすると予想されるように) GL_TEXTURE_2D。
もう 1 つのアイデアは、glPixelStorei を使用してアンパックをセットアップし、ピクセルバッファから読み取ることでした。
glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, X);
glPixelStorei(GL_UNPACK_SKIP_ROWS, Y);
glTexImage2D(...,&pixelbuffer);
しかし信じられないことに、GL_UNPACK_ROW_LENGTH は iOS 用の OpenGl ES2.0 ではサポートされていません。
それで、ありますか:
-テクスチャを作成するために使用する前に、バッファーをピクセル サブセットにインデックス付けすることで、CVPixelBufferRef のピクセル データを分割する方法はありますか?
-上記のコードで作成されたGL_TEXTURE_2Dのインデックス付きサブセットとして6つの新しいGL_TEXTURE_2Dを作成する方法
- GL_TEXTURE_2D を有効な GL_TEXTURE_CUBE_MAP に変換する方法 (たとえば、GLKit には単一のキューブストリップ ファイルから GL_TEXTURE_CUBE_MAP をロードする Skybox 効果があります。ただし、メモリからテクスチャをロードする方法がありません。そうしないと、ソートされます)
――他にアイデアは?