0

我有一个使用 OpenGL/OpenGL ES 渲染的 UI 框架。一些 UI 元素具有透明区域。现在我使用边界矩形进行碰撞,但在某些特定情况下,一个元素的透明部分与另一个元素重叠,它无法检测到正确的元素。

我不想保留所用纹理的副本(作为最后的解决方案,我可能只保留 alpha 通道)。

在这种情况下,您认为我应该如何处理碰撞检测?该解决方案应该是快速和内存友好的。

OpenGL/OpenGL ES 纹理内存读取速度是否足够快以使用它(很少,仅在事件上)来获取一个像素的 alpha 值?这个读数会破坏 OpenGL/OpenGL ES 管道吗?

编辑:

为了更清楚,我只需要 Object-Point 碰撞 - 它是一个 UI 库,但例如某些按钮可能没有矩形形式,并且它们的边界框可能重叠。在这种情况下,我需要正确检测按下的按钮。

4

1 回答 1

0

如果 UI 元素没有改变,你可以为每个按钮声明一个 CGPathRef,然后使用 CGPathContainsPoint 来检测哪个按钮被按下。您可能必须遍历每个按钮,但核心图形完成的检查速度足够快,不会减慢应用程序的速度。

请注意,这是像素完美检测。如果不使用物理引擎,您将无法变得更快或更精确。

编辑 :

在这种情况下使用PIP算法将起作用......正如你所注意到的......它有一个洞。您也可以对多个孔使用相同的想法。

在此处输入图像描述

于 2012-12-11T16:01:00.417 回答