【问题标题】:GLSL blur effect on non textured rectGLSL对非纹理矩形的模糊效果
【发布时间】:2021-08-31 00:51:13
【问题描述】:

我正在尝试使用 glsl 着色器进行模糊处理。 我在互联网上寻找过它,但只找到了带有纹理输入的片段着色器。 如果我想模糊没有纹理的东西怎么办?我该怎么做?

应该是这样的:

【问题讨论】:

  • 您能更具体地了解想要的效果吗?我的图片会有所帮助。
  • @RobinCirex 渲染到文本或在第一遍中使用glReadPixels,然后在第二遍中使用从第一遍获得的纹理对其进行模糊
  • @RobinCirex 您的图像在哪里/如何定位/存储?
  • @RobinCirex 嗯? “模糊”是一种应用于图像的操作。实际上,您只是在上面的问题中附加了一个示例图像。该图像必须存储在系统内存中的某个位置——我的问题是在哪里。如果它不在纹理中,是否在帧缓冲区中?系统内存?文件?
  • @RobinCirex 参见OpenGL Scale Single Pixel Line 2 pass 渲染示例,如果你想要速度并且有能力使用FBO and render to texture 来代替glReadPixels...

标签: opengl glsl shader blur


【解决方案1】:

着色器无法直接从帧缓冲区读取。纹理是从着色器中读取图像的主要方式(还有SSBO,但我不建议在这里使用它)。

因此,简而言之,“如何在没有纹理的情况下模糊图像”的答案是:创建纹理!您可以使用glCopyTextureSubImage2D 将图像从帧缓冲区复制到纹理;或者,更好的是,从一开始就渲染到由纹理支持的off-screen FBO

编辑:从当前帧缓冲区复制到纹理的示例(在 C 中):

GLuint tex;
glCreateTextures(GL_TEXTURE_2D, 1, &tex);
glTextureStorage2D(tex, 1 /*levels*/, GL_SRGB8_ALPHA8, width, height);
glCopyTextureSubImage2D(tex, 0, 0, 0, 0, 0, width, height);
// tex now contains the content of framebuffer

【讨论】:

  • 你能举例说明如何使用 glCopyTexSubImage2D 和存储数据吗?因为它不返回任何东西。顺便说一句,我正在用 Java 做这个,之前可能应该提到过。
猜你喜欢
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多