使用 Metal 扭曲 iOS 中的视图

Eri*_*rik 5 ios swift metal metalkit

问题:

如何捕获要在 Metal 中修改的视图?

我(可能不完整)的理解是,我需要将视图捕获为纹理,将其移动到设备内存中,使用着色器对其进行处理,然后将其渲染回视图中。我目前陷入了捕捉视图的第一步。这个问题的范围仅限于捕获纹理并将其放入 Metal 中,如果我遇到着色器问题,我将为此提出一个单独的问题。

如果有比下降到 GPU 级别更简单的方法,我愿意接受建议。

背景:

出于学习的目的,我尝试使用 Metal重新创建这段短片中看到的波纹效果(不使用像视频中那样的 Qt 和 OpenGL)。据我了解,我需要一个顶点着色器和片段着色器。我想我可以通过一些实验将存储库中的 openGL 着色器转换为 Metal。

Apple 提供了与 iOS 非常相似的动画CATransition“rippleEffect”,因此这似乎是可能的,但他们使用的 API 是私有的,并且可能会让您的应用程序被应用程序商店拒绝。

我还遇到过BCMeshTransformView,它似乎与我想做的非常相似,但我没有运气尝试从源头收集它的工作原理。

我花了几个小时搜索文档,但总的来说,我是图形方面的初学者,因此我可能无法在谷歌上搜索正确的术语。

ldo*_*ogy 2

实现此目的最简单的方法是使用CoreImage。CI 提供了非常广泛的效果,可以相当轻松地应用于您的视图(这里是完整列表)。

如果这些都不适合您,您实际上可以使用 GLSL(OpenGL 着色语言)编写自定义 CIFilter,它将直接在 GPU 上运行。

您可以通过抓取视图的CIFiltera ,将其转换为 a ,运行过滤器,然后将其显示在屏幕上,将给定应用于 a 。我相信这比尝试使用 Metal 更容易,因为 Metal 是一个级别低得多的 API。UIViewUIImageCIImageCIImage

有关执行此操作的 CoreImage 代码示例,请参阅如何将 CIFilter 应用到 UIView?