我正在尝试使用需要用户交互的 iOS 金属构建一个简单的应用程序。触摸屏幕后,屏幕上的焦点转移到触摸点。有点像 Zen Garden 应用程序,在触摸时,您会更靠近被触摸的点。任何关于使用什么方法或如何进行设计的想法/建议/讨论将不胜感激。
谢谢!
您可以将 UITapGestureRecognizer 链接到应用程序的 UIView。有了它,您可以像以下问题一样获得水龙头的坐标:
您可以使用 MTLBuffer 将新坐标移交给着色器函数。
如果您希望用户能够像 Zen Garden 那样在场景中选择 3D 对象,您可以实现选择缓冲区。
您为每个可选对象分配一个唯一的颜色(或整数 ID)并将其存储在一个简单的表中。您渲染到“选择缓冲区”(实际上是可渲染纹理)并写入唯一的颜色或整数 ID。您可以 A)在渲染场景以供查看时将此选择缓冲区渲染为另一个附件,或者 B)您可以在另一个通道中再次渲染场景(绘制一次以查看场景,另一次绘制以填充选择缓冲区)。
当您获得触摸事件时,您可以使用事件 2D 坐标来选择该坐标处的像素。您会读回选择缓冲区并检查颜色(或整数 ID)。由于每个对象的颜色都是唯一的,因此您可以使用该颜色在您创建的表中查找对象。
至于是 A) 为选择缓冲区使用附件还是 B) 在第二遍中渲染它:A) 具有不需要绘制每个对象两次的优点,因为您在渲染场景以供查看时渲染选择缓冲区。使用 B) 您的选择缓冲区可以小于用于查看的缓冲区,从而使其在填充率方面更快。同样使用 B) 更容易将用于查看的渲染与用于选择的渲染分开所以您只需要在收到触摸事件时渲染选择缓冲区。