使用着色器创建模糊过滤器 - 从片段着色器访问相邻像素?

2024-03-31

我想使用 OpenGL ES 2.0 中的片段着色器创建模糊效果。我感兴趣的算法只是一个平均模糊 - 将所有相邻像素添加到我自己中并除以 9 进行标准化。

但是我有两个问题:

1)这是否需要我首先渲染到帧缓冲区,然后切换渲染目标?或者有更简单的方法

2) 假设我将“源”图像绑定为模糊纹理 0,并且输出模糊纹理。如何访问不是我当前正在处理的像素。垂直着色器已为像素 i 调用我,但我需要访问我周围的像素。如何?我怎么知道我是否是边缘情况(字面意思是在屏幕边缘)

(3:是否有更合适的算法来得到模糊的磨砂玻璃看起来模糊)


进一步阐述马蒂亚斯所说的话:

  1. 是的。您将图像渲染为纹理(最好使用 FBO 完成),然后在第二个(模糊)通道中绑定该纹理并从中读取。您无法一步执行渲染和模糊通道,因为您无法访问当前正在渲染的帧缓冲区。这会引入数据依赖性,因为您的邻居还不需要获得最终颜色,或者更糟糕的是颜色取决于您。

  2. 您可以在特殊片段着色器变量中获取当前像素的坐标gl_FragCoord并将它们用作包含先前渲染图像的纹理的纹理坐标,同样gl_FragCoord.x +/- 1 and gl_FragCoord.y +/- 1为了邻居。但正如 Matias 所说,您需要分别将这些值除以(图像的)宽度和高度,因为纹理坐标位于 [0,1] 中。通过使用GL_CLAMP_TO_EDGE作为纹理的环绕模式,边缘情况由纹理硬件自动处理。因此,在边缘处,您仍然会得到 9 个值,但只有 6 个不同的值(另外 3 个值,实际上位于图像之外,只是其内部邻居的重复项)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用着色器创建模糊过滤器 - 从片段着色器访问相邻像素? 的相关文章

  • 使用 LibGDX 的法线贴图 GLSL

    我尝试使用 LibGDX 实现法线贴图 因此 当我在顶点着色器中计算漫反射和镜面反射颜色时 我得到了一些积极的结果 至少我这么认为 顶点着色器 attribute vec4 a position attribute vec2 a texCo
  • 如何在 Libgdx 中支持 OpenGL ES GL10、GL11 和 GL20?

    我正在编写一个使用 GL10 的 3d 游戏 但我希望该应用程序支持 GL11 或 GL20 如果可用 支持这三者的最佳设计是什么 或者这是一个愚蠢的差事 我应该只专注于支持一个版本 我当前的想法是将 render 函数拆分为 render
  • OpenGL ES 2.0 中的多通道着色器

    首先 是否子程序需要 GLSL 4 0 那么它在 OpenGL ES 2 0 的 GLSL 版本中不可用吗 I quite了解什么是多通道着色器 那么我的照片是什么 使用一些着色器将一些东西 例如精灵 绘制到 FBO 将 FBO 视为大屏幕
  • 是否可以在Unity的HDRP中创建DepthMask效果?

    我已经为此努力了一段时间 但我不知道是否有可能创建一个深度掩模着色器HDRP 如此处所述 http wiki unity3d com index php DepthMask 对于我的确切用途 我试图在应用了材质的任何形状上创建一个 洞 以显
  • iPhone iOS 5.0 OpenGl ES 2.0

    说真的 我已经花了几周甚至几个月的时间来寻求有关 iPhone 上使用 XCode 4 2 的 OpenGL 的一些认真帮助 我需要一个很好的教程 介绍如何从使用新的 XCode 4 2 的 OpenGL 游戏 模板开始 然后从那里开始进展
  • iOS如何屏蔽图像背景颜色

    我想在我的 iOS 应用程序中执行以下操作 用户可以在白色背景纸上画一些东西 我的应用程序允许用户捕获绘制的图像 这里的图像将以白色背景捕获 最后 从捕获的图像中 我需要掩盖白色背景颜色 然后将图像单独放入 UIImage 对象中 我完成了
  • 以到最近边缘的距离为函数的着色矩形会在对角线上产生奇怪的结果

    I m trying to color a rectangle in ShaderToy GLSL in function of each pixel s distance to the nearest rectangle edge How
  • 为什么 GLSL 的算术函数在 iPad 上与在模拟器上产生如此不同的结果?

    我目前正在寻找在 iOS 设备上运行的 OpenGL ES 2 0 片段着色器代码中的一些错误 代码在模拟器中运行良好 但在 iPad 上它存在巨大问题 并且某些计算产生截然不同的结果 例如我有0 0在 iPad 上和4013 17在模拟器
  • 如何绘制存储在 SSBO 中的顶点?

    这是下面的一个问题OpenGL 和加载 读取 AoSoA 混合 SoA 格式的数据 https stackoverflow com questions 59616117 opengl and loading reading data in
  • OpenGL 实现多通道

    我在移植一些已成功实现的代码时遇到问题着色玩具 https www shadertoy com view XdyfWK对于桌面 OpenGL 问题是我需要创建一个 FrameBufferObject FBO 以便我可以进行离屏计算 稍后将其
  • Three.js 使用 WebRTC 并应用 Shader

    我不知道如何将着色器应用于具有视频纹理的 Three js 对象 我一直在使用 webRTC 和 Three js 并使用标准材质成功将视频纹理映射到网格上 var material new THREE MeshBasicMaterial
  • Nexus S 上的 OpenGL ES 黑色纹理

    在 Nexus One 上运行的 OpenGL 代码在 Nexus S 上无法正常运行 纹理似乎没有渲染 纹理应该在的地方只剩下黑色 有人有什么想法吗 The 此处给出的已接受答案 https stackoverflow com quest
  • 使用 Three.js 在片段着色器中手动选择 mipmap 的 lod

    我正在使用 Three js 中的 glsl es 编写一个基于物理的着色器 为了添加镜面全局照明 我使用内部带有 mipmap 链的立方体贴图 dds 纹理 按照 CubeMapGen 的说明进行预先计算here http seblaga
  • 如何在 WebGL 中创建合适的圆角矩形?

    我试图实现答案这个问题 https stackoverflow com questions 43970170 bordered rounded rectangle in glsl但似乎有点问题 如果您打开他们的 ShaderToys 并尝试
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 如何使着色器淡入某种颜色?

    这是我当前使用的着色器 它通过缓慢降低不透明度来淡化对象 我想褪成紫色 如何才能做到这一点 着色器 frag uniform sampler2D texture uniform float opacity void main vec4 pi
  • 如何在android中录制视频的同时在视频上绘图,并保存视频和绘图?

    我正在尝试开发一款应用程序 允许我在录制视频时在视频上绘图 然后将录制内容和视频保存在一个 mp4 文件中以供以后使用 另外 我想使用camera2库 特别是我需要我的应用程序在高于API 21的设备上运行 并且我总是避免使用已弃用的库 我
  • DirectX 世界视图矩阵乘法 - GPU 或 CPU 的地方

    我是 directx 的新手 但令我惊讶的是 我看到的大多数示例中 世界矩阵和视图矩阵都是作为顶点着色器的一部分相乘 而不是与 CPU 相乘并将结果传递给着色器 对于刚性对象 这意味着您为对象的每个顶点将相同的两个矩阵相乘一次 我知道 GP
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 具有 OpenGL ES 3.1 上下文的 GLSurfaceView

    我正在使用 OpenGL 开发 Android 我知道如何使用GLSurfaceView及其自定义派生类 使用以下方法创建 OpenGL ES 2 0 上下文GLSurfaceView setEGLContextClientVersion

随机推荐