我正在尝试使用iOS金属构建一个简单的应用程序,这需要用户交互。 在触摸屏幕时,屏幕上的焦点移动到触摸的点。有点像Zen Garden应用程序,在触摸时,您移动到更接近被触摸的点。 任何有关使用何种方法或如何设计此方法的想法/建议/讨论将不胜感激。
谢谢!
答案 0 :(得分:1)
您可以将UITapGestureRecognizer链接到您应用的UIView。有了它,您可以获得点击的坐标,如下面的问题:
How to get a CGPoint from a tapped location?
您可以使用MTLBuffer将新坐标移交给着色器函数。
答案 1 :(得分:0)
如果您希望用户能够像Zen Garden一样在场景中选择3D对象,则可以实现选择缓冲区。
为每个可选对象分配唯一的颜色(或整数ID)并将其存储在简单表中。您渲染到“选择缓冲区”(实际上是可渲染的纹理)并写入唯一的颜色或整数ID。您可以A)在渲染要查看的场景时将此选择缓冲区渲染为另一个附件,或者B)您可以在另一遍渲染场景(再次绘制一次以查看场景,另一次填充选择缓冲区)。>
当您获得触摸事件时,可以使用事件2D坐标选择该坐标处的像素。您将读回选择缓冲区并检查颜色(或整数ID)。由于颜色对于每个对象都是唯一的,因此您可以使用颜色在创建的表中查找对象。
就是否A)为选择缓冲区使用附件或B)在第二遍中渲染它而言:A)的优点是不需要绘制每个对象两次,因为在渲染场景时渲染选择缓冲区供观看。使用B),您的选择缓冲区可以小于用于查看的缓冲区,从而使其填充速度更快。同样,使用B),可以更轻松地将呈现供查看的视图与可供选择的呈现区分开来,因此,仅在发生触摸事件时才需要呈现选择缓冲区。