Opengl 基于鼠标单击读取帧缓冲区对象中的像素

Opengl 基于鼠标单击读取帧缓冲区对象中的像素,opengl,3d,glut,Opengl,3d,Glut,我正在使用帧缓冲区对象进行屏幕外渲染。这就是我初始化FBO的方式: glGenFramebuffers(1, &fb); glBindFramebuffer(GL_FRAMEBUFFER, fb); glGenRenderbuffers(1, &color_rb); glBindRenderbuffer(GL_RENDERBUFFER, color_rb); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, windowWidth,

我正在使用帧缓冲区对象进行屏幕外渲染。这就是我初始化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。这是我的glut鼠标功能:

字节像素

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

    cout << "Pixel clicked: " << (int) pixel << endl;
glReadBuffer(GL\u COLOR\u附件0);
glReadPixels(x,windowHeight-y-1,1,1,GL_RGB,GL_无符号字节和像素);
库特
尝试使用常规的“ole
GL\U帧缓冲区”而不是
GL\U DRAW\U帧缓冲区

尝试常规的“ole
GL\u帧缓冲区”而不是
GL\u DRAW\u帧缓冲区

glReadPixels
。因此,如果您想从中读取,您应该在读取之前将其绑定到该目标

或者,您可以绑定到
GL\u帧缓冲区
,它绑定到
GL\u DRAW\u帧缓冲区
GL\u READ\u帧缓冲区
s.

glReadPixels
。因此,如果您想从中读取,您应该在读取之前将其绑定到该目标


或者,您可以绑定到
GL\u FRAMEBUFFER
,它绑定到
GL\u DRAW\u FRAMEBUFFER
GL\u READ\u FRAMEBUFFER
s。我希望我能接受两个答案,因为是您的答案和Nicol的答案的组合帮助我解决了这个问题。我决定掷硬币。尼科尔赢了。谢谢你的回答。没问题,就这样。祝你好运我希望我能接受两个答案,因为这是你的答案和尼科尔的答案的结合,帮助我解决了这个问题。我决定掷硬币。尼科尔赢了。谢谢你的回答。没问题,就这样。祝你好运
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);