我的渲染似乎有问题。当我渲染到一个帧缓冲区,然后到屏幕,图像只是看起来不那么充满活力和褪色。即使是简单的。
在上图中,右侧的粉红色框直接渲染到屏幕缓冲区上,左侧的框首先渲染到帧缓冲区上,然后渲染到屏幕上。我使用了一个多重采样的帧缓冲区,它似乎没有什么不同。我只尝试了一次混合,通过使用GL_RGB的帧缓冲区颜色纹理,也没有帮助。有什么想法?
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); }
3ks5zfa02#
问题最终是帧缓冲区的大小。它太小了,这使得质量受到影响。我将宽度和高度乘以6,质量上升了。
2条答案
按热度按时间z4bn682m1#
虽然您尝试过在多采样缓冲区中渲染,但这对我来说很有效,渲染的图像没有质量问题。
可以在多采样帧缓冲区中进行渲染,然后将结果位块传输到帧缓冲区。
为多采样帧缓冲区生成纹理。
创建多重采样帧缓冲区
3ks5zfa02#
问题最终是帧缓冲区的大小。它太小了,这使得质量受到影响。我将宽度和高度乘以6,质量上升了。