首页 文章

使用Metal扭曲iOS中的视图

提问于
浏览 1289
1

Question:

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

我的(可能是不完整的)理解是我需要将视图捕获为纹理,将其移动到设备内存中,使用着色器对其进行处理,然后将其渲染回视图中 . 我目前停留在捕获视图的第一步 . 这个问题的范围仅取决于将纹理捕获到Metal中,如果我遇到着色器的问题,我将为此打开一个单独的问题 .

如果有一种更简单的方法来做到这一点而不是下降到GPU级别,我愿意接受建议 .

Background:

出于学习的目的,我正在尝试使用Metal重新创建this short clip中的涟漪效果(不像视频中那样使用Qt和OpenGL) . 据我了解,我需要一个顶点着色器和片段着色器 . 我想我可以通过一些实验将the repo中的openGL着色器转换为Metal .

Apple提供与iOS非常相似的动画,因此它似乎是可能的,但它们使用的API是私有的,可能会让您的应用程序被应用商店拒绝 .

我也遇到了BCMeshTransformView,这似乎与我想做的非常相似,但我没有任何运气试图从源头收集它是如何工作的 .

我花了几个小时搜索文档,但我是一般的图形初学者,我可能没有用Google搜索正确的术语 .

1 回答

  • 1

    最简单的方法是使用CoreImage . CI提供了非常广泛的效果,可以非常轻松地应用于您的视图(这里是full list) .

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

    您可以通过抓取视图的 UIImage 将一个给定的 CIFilter 应用于 UIView ,将其转换为 CIImage ,运行过滤器,然后在屏幕上显示 CIImage . 我相信这比使用Metal更容易做到这一点,Metal是一个低得多的API .

    对于执行此操作的CoreImage代码示例,请参阅How to apply CIFilter to UIView?

相关问题