我找到了答案,但我无法回答我的问题。
我有FBO,我无法进行alpha混合和多重采样。 FBO将场景绘制到纹理,然后它被淹没到具有两个纹理三角形的默认帧缓冲区。直接绘制到默认的帧缓冲区很好。
这是默认帧缓冲区(顶部)和我的FBO(底部)之间的区别。
我使用带有2x颜色附件和1x深度附件的FBO。 (仅使用GL_COLOR_ATTACHMENT0,其次是其他功能)
深度测试:已禁用
混合:已启用
多重采样:已启用
混合功能:GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA
有什么想法吗?我究竟做错了什么?我不能混合任何透明物体,没有阿尔法。如果您需要更多代码,我可以编辑帖子。
修改
这段代码在代码结构方面更深入,我希望,我能正确地解析它。
设置FBO:
glGenFramebuffers(1, &_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color0_texture_id, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, color1_texture_id, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture_id, 0);
设置颜色纹理:
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
除了一行之外,深度纹理是相同的:
// This is probably wrong
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
修改
现在混合正在运行,但仍然没有多重采样。怎么做?
答案 0 :(得分:3)
要在渲染到FBO时使用多重采样,您需要使用glTexImage2DMultisample分配多重采样纹理,并使用GL_TEXTURE_2D_MULTISAMPLE而不是GL_TEXTURE_2D将其附加到FBO。
来源:https://www.opengl.org/wiki/Multisampling#Allocating_a_Multisample_Render_Target