我有一个用OpenGL / OpenGL ES渲染的UI框架。一些UI元素具有透明区域。现在我使用边界矩形进行碰撞,但在某些特殊情况下,一个元素的透明部分与其他元素重叠,则无法检测到正确的元素。
我不想保留使用过的纹理的副本(作为最后的解决方案,我可能只保留alpha通道)。
在这种情况下,您认为我应该如何处理碰撞检测?解决方案应该快速且对内存友好。
OpenGL / OpenGL ES纹理内存读取速度是否足以使用它(很少,仅在事件上)获取一个像素的alpha值?这个读取会破坏OpenGL / OpenGL ES管道吗?
编辑:
为了更清楚,我只需要对象点碰撞 - 它是一个UI库,但是一些按钮可能没有矩形形式,它们的边界框可能重叠。在这种情况下,我需要正确检测按下的按钮。
答案 0 :(得分:0)
如果UI元素没有改变,你可以为每个按钮声明一个CGPathRef,然后使用CGPathContainsPoint来检测按下哪一个。您可能需要遍历每个按钮,但核心图形完成的检查速度足够快,不会减慢应用程序的速度。
请注意,这是像素完美检测。如果不使用物理引擎,就无法获得更快或更精确的效果。
编辑:
在这种情况下使用PIP算法会有效......正如您所注意到的..它有一个洞。您也可以对多个孔使用相同的想法。