iOS Metal:启用用户交互

Posted

技术标签:

【中文标题】iOS Metal:启用用户交互【英文标题】:iOS Metal: Enabling user interaction 【发布时间】:2015-03-10 23:58:43 【问题描述】:

我正在尝试使用需要用户交互的 ios metal 构建一个简单的应用程序。 触摸屏幕后,屏幕上的焦点转移到触摸点。有点像 Zen Garden 应用程序,在触摸时,您会更靠近被触摸的点。 任何关于使用什么方法或如何进行设计的想法/建议/讨论将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

您可以将 UITapGestureRecognizer 链接到您应用的 UIView。有了它,您可以像以下问题一样获得水龙头的坐标:

How to get a CGPoint from a tapped location?

您可以使用 MTLBuffer 将新坐标移交给着色器函数。

【讨论】:

【参考方案2】:

如果您希望用户能够像 Zen Garden 那样选择场景中的 3D 对象,您可以实现选择缓冲区。

您为每个可选对象分配一个唯一的颜色(或整数 ID)并将其存储在一个简单的表中。您渲染到“选择缓冲区”(实际上是可渲染纹理)并写入唯一的颜色或整数 ID。您可以 A)在渲染场景以供查看时将此选择缓冲区渲染为另一个附件,或者 B)您可以在另一个通道中再次渲染场景(绘制一次以查看场景,另一次填充选择缓冲区)。

当您获得触摸事件时,您可以使用事件 2D 坐标来选择该坐标处的像素。你会读回选择缓冲区并检查颜色(或整数 ID)。由于每个对象的颜色都是唯一的,因此您可以使用该颜色在您创建的表中查找对象。

至于是 A) 为选择缓冲区使用附件还是 B) 在第二遍中渲染它:A) 具有不需要绘制每个对象两次的优点,因为您在渲染场景时渲染了选择缓冲区供观看。使用 B) 您的选择缓冲区可以小于用于查看的缓冲区,从而使其在填充率方面更快。同样使用 B) 更容易将用于查看的渲染与用于选择的渲染分开,因此您只需在收到触摸事件时仅渲染选择缓冲区。

【讨论】:

以上是关于iOS Metal:启用用户交互的主要内容,如果未能解决你的问题,请参考以下文章

UIView - “用户交互启用”父级为假但子级为真?

在身份检查器、属性检查器中启用用户交互?

如何在编辑模式下启用 UITableViewCell contentView 上的用户交互?

启用用户交互的 FadeIn 和 FadeOut UISlider

iPhone UIView:是不是可以仅在子视图上启用用户交互?

在 UIView.animateWithDuration() 期间启用手势识别器的用户交互