2

テクスチャ イメージからピクセル データを読み取るために glReadPixels を使用できますか?

テクスチャ イメージを生成するための私のコードは次のとおりです。

gl.glTexImage2D( GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, width, height, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap( pixels ) );

可変ピクセルには、画像のピクセル値が含まれます。次に、glReadPixels を使用して、作成したばかりのテクスチャ イメージのピクセル データを読み取ろうとします。glReadPixels を使用するための私のコードは次のとおりです。

    FloatBuffer buffer = FloatBuffer.allocate( 4 );
    for ( int row = 0, col; row < height; row++ ) {
        for ( col = 0; col < width; col++ ) {
            gl.glReadPixels( col, row, 0, 0, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );
            System.out.print( buffer.get( 0 ) );
        }
        System.out.println();
    }

問題は、0.0 の値を取得し続けることです。glReadPixels がフレーム バッファからデータを読み取るため、テクスチャ イメージがフレーム バッファに格納されているかどうか疑問に思っています。

4

2 に答える 2

5

glReadPixelsは、デフォルトのフレームバッファ(dblバッファリングの場合はGL_BACK)から読み取ります。はい。テクスチャを読み取るには、テクスチャカラーバッファが接続されたFBOを使用することをお勧めします。次に、FBOをアクティブに設定すると、glReadPixelsを使用できます。FBOを使いこなすのはかなり複雑で、JOGLを使用しているため、内部でGLFBODrawable / FBObjectを使用し、glReadPixelsを使用してスナップショットを実行するオフスクリーン単体テストにリンクします。多くの場合、コードとその新しいAPIについて少し説明する必要があります。

于 2012-10-07T00:48:18.817 に答える
2

この行のエラーだと思います。

gl.glReadPixels( col, row, 0, 0, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );

代わりに次を試してください

gl.glReadPixels( col, row, 1, 1, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );

また、画像全体を同時に読むことをお勧めします。必要なバッファサイズを割り当てることを忘れないでください。

gl.glReadPixels( col, row, width, height, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );
于 2013-03-20T15:50:29.107 に答える