问题描述
我正在使用 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 (将#修改为@)