具有透明度的UI元素的碰撞检测

时间:2012-12-11 13:23:22

标签: opengl opengl-es opengl-es-2.0 collision-detection

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

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

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

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

编辑:

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

1 个答案:

答案 0 :(得分:0)

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

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

编辑:

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

enter image description here