基于鼠标单击读取帧缓冲区对象中的像素
Posted
技术标签:
【中文标题】基于鼠标单击读取帧缓冲区对象中的像素【英文标题】:Read pixel in frame buffer object based on mouse click 【发布时间】:2013-05-30 14:03:57 【问题描述】:我正在使用帧缓冲区对象进行屏幕外渲染。这就是我初始化 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 中的相应像素位置?
【问题讨论】:
【参考方案1】:glReadPixels
reads from the framebuffer currently bound to GL_READ_FRAMEBUFFER
。所以如果你想从中读取,你应该在读取之前将它绑定到那个目标。
或者,您可以绑定到GL_FRAMEBUFFER
,它同时绑定到GL_DRAW_FRAMEBUFFER
和GL_READ_FRAMEBUFFER
s。
【讨论】:
【参考方案2】:glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);
尝试使用普通的 'ole GL_FRAMEBUFFER
而不是 GL_DRAW_FRAMEBUFFER
。
【讨论】:
我希望我能接受两个答案,因为这是您的答案和 Nicol 的答案的结合,帮助我解决了这个问题。我决定只是抛硬币。尼科尔赢了。谢谢你的回答。 没问题,就这样吧。祝你好运!以上是关于基于鼠标单击读取帧缓冲区对象中的像素的主要内容,如果未能解决你的问题,请参考以下文章
读取 WebGLTexture 中的像素(将 WebGL 渲染到纹理)
WebGL - 当我从帧缓冲区读取像素数据时,图标失去透明度