2012-12-11 37 views
0

我有一個用OpenGL/OpenGL ES呈現的UI框架。某些UI元素具有透明區域。現在我使用邊界矩形進行碰撞,但在某些特定情況下,來自一個元素的透明部分與其他元素重疊時,它無法檢測到正確的元素。具有透明度的UI元素的碰撞檢測

我不想保留所用紋理的副本(作爲最後一個解決方案,我可能只保留alpha通道)。

您認爲在這種情況下我應該如何處理碰撞檢測?解決方案應該快速和內存友好。

OpenGL/OpenGL ES紋理內存讀取速度是否足夠快,以便使用它(很少,只在事件上)獲取一個像素的Alpha值?這個閱讀是否會打破OpenGL/OpenGL ES管道?

編輯:

爲了使它更清楚,我只需要對象的角度碰撞 - 這是一個UI庫,但一些按鈕,例如可能沒有矩形形態及其邊界框可能會重疊。在這種情況下,我需要正確檢測按下的按鈕。

+0

@genpfault你爲什麼刪除我的opengl標籤?有些用戶可能認爲我只在OpenGL ES中使用它,這是不正確的。 – Felics

+1

我通常會盡量保持'opengl'和'opengl-es'標籤的獨立性,因爲大多數情況下它們都非常不同。昨天一定是在自動駕駛儀上重新標記,對不起。 – genpfault

回答

0

如果UI元素沒有更改,則可以爲每個按鈕聲明CGPathRef,然後使用CGPathContainsPoint檢測哪個按鈕被按下。您可能必須遍歷每個按鈕,但核心圖形所做的檢查足夠快,不會減慢應用程序的運行速度。

請注意,這是像素完美檢測。如果不使用物理引擎,你無法更快或更精確。

編輯:

使用PIP算法針對這種情況將工作...和你注意到..它有一個洞。您也可以對多個孔使用相同的想法。

enter image description here

+0

CGPathRef和CGPathContainsPoint是Apple特有的,我不能在PC上使用它。當對象中有「洞」時,路徑方法也會失敗。 – Felics

+0

那麼你在找什麼[點在多邊形問題](http://alienryderflex.com/polygon/)。您也沒有指定您使用的平臺 – skytz

+0

感謝您的幫助,但我認爲當它包含帶有多邊形的「孔」時很難描述該對象。 – Felics