2012-12-11 3 views
0

OpenGL/OpenGL ES로 렌더링 된 UI 프레임 워크가 있습니다. 일부 UI 요소에는 투명 영역이 있습니다. 이제는 경계 사각형을 사용하여 충돌을 처리하지만 특정 요소의 투명한 부분이 다른 요소와 겹치는 특정 경우에는 올바른 요소를 감지하지 못합니다.투명도가있는 UI 요소의 충돌 감지

사용 된 텍스처의 복제본을 유지하고 싶지 않습니다. 마지막 솔루션으로 알파 채널 만 포함 할 수 있습니다.

이 경우 충돌 감지에 어떻게 접근해야한다고 생각합니까? 솔루션은 빠르고 메모리에 친숙해야합니다.

OpenGL/OpenGL ES 텍스처 메모리는 한 픽셀에 알파 값을 가져 오기 위해 (이벤트에서는 드문 경우이지만) 사용하기에 충분히 빠른가요? 이 독서가 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

그러면 당신이 찾고있는 것은 [point-in-polygon problem] (http://alienryderflex.com/polygon/)입니다. 또한 사용중인 플랫폼을 지정하지 않았습니다 – skytz

+0

도움을 주셔서 감사합니다. 그러나 폴리곤이있는 "구멍"이 포함되어있을 때 오브젝트를 설명하는 것이 매우 어렵다고 생각합니다. – Felics