0

以前に openGL によって描画されたフレームバッファ データに対して、いくつかの CPU 操作を行う必要があります。描画する必要がある解像度がテクスチャ解像度よりも高い場合があるため、ビューポートとターゲット FBO のサイズを選択し、描画し、CPU バッファーに読み取り、ビューポートをスペース内の別の場所に移動することを考えました。と繰り返します。私のCPUメモリには、必要なすべてのカラーデータがあります。残念ながら、私の目的では、タイルの垂直境界線と水平境界線の間で 1 ピクセルのオーバーラップを維持する必要があります。したがって、サイズが SIZE x SIZE の 4 つのタイルがある状況を想像してください。

0 1
2 3

たとえば、タイル 0 のデータの最後の列にタイル 1 のデータの最初の列と同じデータを保持し、タイル 0 のデータの最後の行にタイル 2 の最初の行の同じデータを保持する必要があります。したがって、私が描画する合計解像度は

SIZEW * ntilesHor -(ntilesHor-1) x SIZEH * ntilesVer -(ntilesVer-1)

simplicity の場合、SIZEW と SIZEH は同じになり、ntilesVer と ntilesHor も同じになります。私のコードは次のようになります

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glViewport(0, 0, tilesize, tilesize);
glPolygonMode(GL_FRONT, GL_FILL);

for (int i=0; i < ntiles; ++i)
{
    for (int j=0; j < ntiles; ++j)
    {
        tileid = i * ntiles +j;

        int left = max(0, (j*tilesize)- j);
        int right = left + tilesize;
        int bottom = max(0, (i*tilesize)- i);
        int top = bottom + tilesize;

        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(left, right, bottom, top, -1, 0);   

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        // Draw display list
        glCallList(DList);

        // Texture target of the fbo
        glReadBuffer(tex_render_target);

        // Read to CPU to preallocated buffer
        glReadPixels(0, 0, tilesize, tilesize, GL_BGRA, GL_UNSIGNED_BYTE, colorbuffers[tileid]);
    }
}

コードが実行され、さまざまなバッファー「colorbuffers」で、colordata のように見えるものを持っているように見えます。つまり、タイル 0 の最後の列とタイル 1 の最初の列が異なる値を生成します。何か案が?

4

1 に答える 1

0
    int left = max(0, (j*tilesize)- j);
    int right = left + tilesize;
    int bottom = max(0, (i*tilesize)- i);
    int top = bottom + tilesize;

それらのマージンについてはわかりません。ビューポートで示唆されているように、意図がピクセルベースのマッピングであり、一定のオーバーラップがある場合、-jとの-i用語は不均一であるため意味がありません。そこには一定の値が必要だと思います。また、そこには必要ありませんmax。ただし、1 ピクセルのオーバーラップが必要なため、定数は 0 になります。

right_j == left_(j+1)

ボトムとトップも同じです。これはまさにあなたが意図したものです。

于 2012-07-13T00:37:55.473 に答える