【问题标题】:Reading pixel Data in Fragment Shader在片段着色器中读取像素数据
【发布时间】:2019-04-30 05:02:12
【问题描述】:

我正在 Metal iOS 中做一个照片编辑应用程序。我有图像纹理。当用户点击纹理时我想要一个工具我想要制作点击点(点击点周围的方形区域)我想要读取该特定区域并且我想要读取颜色并且我想要使其成为灰度。

我知道我们可以在内核函数中读取纹理的像素数据。是否可以在 Fragment Shader 中读取像素数据并执行上述场景。

【问题讨论】:

  • 在 iOS 上,片段着色器可以从颜色附件接收颜色作为输入变量。使用[[color(m)]] 属性装饰参数(或[[stage_in]] 结构参数的字段)。请参阅 Metal Shading Language Specification 中的 Programmable Blending 部分,其中实际给出了转换为灰度的示例。
  • @KenThomases 我会解释这个问题。我有一个尺寸为 0f 2732*2048 的纹理。 .当用户点击(732.5,456.6)时。我需要在大小为 3 像素宽度的抽头点周围制作一个正方形,并且我想读取该像素,我想直接附加该像素。在某些情况下,我想要灰度。我想在绘图应用程序中使用橡皮擦工具之类的一些场景

标签: ios swift metal metalkit


【解决方案1】:

您所描述的是 Apple 提供的 HelloCompute Metal 示例。只需下载它并查看如何渲染纹理以及如何使用着色器将彩色像素转换为灰度。 BasicTexturing 示例还展示了如何自己进行纯纹理渲染。

【讨论】:

  • 我正在以类似屏幕尺寸的四边形绘制 RGB 图像。在那个纹理中,我想制作像灰度油漆刷一样。只有我触摸的地方需要转灰度其他地方仍然是RGB。
  • 是的,一步一步构建它。首先将 RGB 的基本渲染转换为在 Metal 中工作的纹理,然后添加到该纹理中,以便使用第二个输入纹理(8 位灰度)来识别应应用灰度效果的像素位置。使用 0 表示无灰度效果,使用 1 -> 255 增加灰度效果的数量,然后在片段着色器中逐个像素地应用效果。您的用户级代码将需要检测触摸并渲染到灰度纹理中以识别触摸的位置。您可以使用 CoreGraphics 渲染触摸输入纹理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多