1

オフスクリーン レンダリングを行うためにフレーム バッファ オブジェクトを使用しています。これは私がFBOを初期化する方法です:

glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
glGenRenderbuffers(1, &color_rb);
glBindRenderbuffer(GL_RENDERBUFFER, color_rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, windowWidth, windowHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_rb);

glGenRenderbuffers(1, &depth_rb);
glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, windowWidth, windowHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);

私のglutマウス機能では、メインウィンドウでクリックされた場所を使用して読み取り、FBOの対応するピクセル位置にマップして読み取ろうとしています。ただし、オフスクリーンでレンダリングされた FBO ではなく、メイン ウィンドウからピクセル データを取得しているようです。これが私の貪欲なマウス機能です:

Glubyte ピクセル;

    glReadBuffer(GL_COLOR_ATTACHMENT0);
    glReadPixels(x, windowHeight - y - 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &pixel);

    cout << "Pixel clicked: " << (int) pixel << endl;

メインウィンドウでクリック位置を使用して、FBOで対応するピクセル位置を読み取る方法を知っている人はいますか?

4

2 に答える 2

2

glReadPixels に現在バインドされているフレームバッファから読み取りますGL_READ_FRAMEBUFFER。したがって、それから読み取りたい場合は、読み取る前にそのターゲットにバインドする必要があります。

または、とのGL_FRAMEBUFFER両方にバインドする にバインドすることもできます。GL_DRAW_FRAMEBUFFERGL_READ_FRAMEBUFFER

于 2013-05-30T15:05:57.543 に答える
2
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);

GL_FRAMEBUFFERの代わりに通常の 'ole を試してくださいGL_DRAW_FRAMEBUFFER

于 2013-05-30T14:51:39.270 に答える