opengl 先渲染到帧缓冲区再渲染到屏幕的质量降低

2skhul33  于 2022-11-29  发布在  其他
关注(0)|答案(2)|浏览(156)

我的渲染似乎有问题。当我渲染到一个帧缓冲区,然后到屏幕,图像只是看起来不那么充满活力和褪色。即使是简单的。

在上图中,右侧的粉红色框直接渲染到屏幕缓冲区上,左侧的框首先渲染到帧缓冲区上,然后渲染到屏幕上。
我使用了一个多重采样的帧缓冲区,它似乎没有什么不同。我只尝试了一次混合,通过使用GL_RGB的帧缓冲区颜色纹理,也没有帮助。有什么想法?

z4bn682m

z4bn682m1#

虽然您尝试过在多采样缓冲区中渲染,但这对我来说很有效,渲染的图像没有质量问题。
可以在多采样帧缓冲区中进行渲染,然后将结果位块传输到帧缓冲区。
为多采样帧缓冲区生成纹理。

glGenTextures(1, &w_textureMsaaId);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, &w_textureMsaaId);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, w_msaa, GL_RGBA8, 1920, 1080, true);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);

创建多重采样帧缓冲区

glGenFramebuffers(1, &w_fboMsaaId);
glGenRenderbuffers(1, &w_rboDepthId);
    
glBindFramebuffer(GL_FRAMEBUFFER, w_fboMsaaId);
glBindRenderbuffer(GL_RENDERBUFFER, w_rboDepthId);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, w_msaa, GL_DEPTH24_STENCIL8, 1920, 1080);
// attach msaa RBOs to FBO attachment points    
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, w_textureMsaaId[i], 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, w_rboDepthId[i]);

 Blit this to a Frame buffer

glBindFramebuffer(GL_READ_FRAMEBUFFER, w_fboMsaaId);
    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, w_fboId);
        glBlitFramebuffer(0, 0, 1920, 1080,  // src rect
            0, 0, 1920, 1080,  // dst rect
            GL_COLOR_BUFFER_BIT, // buffer mask
            GL_LINEAR);
    }
3ks5zfa0

3ks5zfa02#

问题最终是帧缓冲区的大小。它太小了,这使得质量受到影响。我将宽度和高度乘以6,质量上升了。

相关问题