OpenGL/GLSL 4.5 - 在默认 FBO 中使用 MRT

问题描述

我正在使用 MRT 来解决 OpenGL 4.5 中的 3D 拾取问题。 (参考链接:http://ogldev.atspace.co.uk/www/tutorial29/tutorial29.html

根据我在网上找到的信息,我们在使用MRT时一般会申请一个新的FBO。如果是这样,我应该在3D采摘时对场景进行两次daw(3D采摘的新FBO,以及屏幕的默认FBO),这会浪费时间。

所以我想知道是否可以在默认 FBO 中使用 MRT,但我遇到了一些问题。

这是我的代码。

// apply the texture buffer attached to GL_COLOR_ATTACHMENT1. (GL_COLOR_ATTACHMENT0 is reserved for the screen ?)
glEnable(GL_TEXTURE_2D);
glGenTextures(1,&m_pickingColorTexture);
glBindTexture(GL_TEXTURE_2D,m_pickingColorTexture);
glTexImage2D(GL_TEXTURE_2D,GL_RGB32F,w,h,GL_RGB,GL_FLOAT,nullptr);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT1,GL_TEXTURE_2D,m_pickingColorTexture,0);
glDisable(GL_TEXTURE_2D);

// draw code. 
GLenum buffers[] = { GL_COLOR_ATTACHMENT0,GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2,buffers);
glDrawElements(........);

// fragment shader,output two kinds of things: frag_color0 for screen display,frag_color1 for 3D picking
 .......
layout (location = 0) out vec4 frag_color0; 
layout (location = 1) out vec4 frag_color1; 
 
void main() {
     frag_color0 = vec4(...);
     frag_color1 = vec4(...);
}

// query the result
glReadBuffer(GL_COLOR_ATTACHMENT1);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glReadPixels(x,y,1,&pixelInfo);

当我最后查询 GL_COLOR_ATTACHMENT1 时,结果似乎是 frag_color0 而不是 frag_color1。

如果有人能帮我解决问题,我将不胜感激,谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)