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);

在我的过剩鼠标功能中,我试图读取使用在主窗口中单击的位置,以映射并读取我的 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
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);

尝试常规的 'oleGL_FRAMEBUFFER而不是GL_DRAW_FRAMEBUFFER.

于 2013-05-30T14:51:39.270 回答
2

glReadPixels 从当前绑定到的帧缓冲区中读取GL_READ_FRAMEBUFFER。因此,如果您想从中读取,则应在读取之前将其绑定到该目标。

或者,您可以绑定到GL_FRAMEBUFFER,它同时绑定到 theGL_DRAW_FRAMEBUFFERGL_READ_FRAMEBUFFERs。

于 2013-05-30T15:05:57.543 回答