Opengl 基于鼠标单击读取帧缓冲区对象中的像素
我正在使用帧缓冲区对象进行屏幕外渲染。这就是我初始化FBO的方式: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,
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_无符号字节和像素);
库特
尝试使用常规的“oleGL\U帧缓冲区”而不是GL\U DRAW\U帧缓冲区
尝试常规的“oleGL\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);