2011-10-27 3 views
0

모든 바디 또는 도형이 화면에서 차지하는 전체 면적을 계산하려고합니다. 나는. 서로 교차하는 두 개의 원 A와 B가있는 경우 유니온 B가 (화면에서) 다루는 면적을 계산하려고합니다.화면의 모든 바디/도형의 전체 면적을 계산하는 방법

나는 chipmunk documentation을 통해 읽었으며 chipmunk API에서 사용할 수있는 방법을 살펴 보았지만 직접 사용할 수있는 것을 찾지 못했습니다.

  • 사용하여 첫 번째 방법 (pointQueryFirst) 이동 : 나는하려면 한 생각 pointQueryFirst:layers:group:segmentQueryFirstFrom:to:layers:group:

    방법 :

    유일한 방법은 두 나는이 두 가지, 유용 할 수 있습니다 발견 화면의 모든 지점을 통해이 메소드를 호출하십시오. 점에 도형이 없으면 변수에 그 점을 누적하십시오. 그런 다음 해당 변수 값을 화면 영역과 나누어 비어있는 화면 비율을 얻습니다.

  • 두 번째 방법 (segmentQueryFirstFrom)을 사용하고 화면을 절반으로 분할하고 각 절반에 모양을 포함하는 쿼리를 실행 한 다음 해당 영역을 반으로 나누고 그 중 어떤 모양이 포함되어 있는지 확인하는 재귀 알고리즘을 만듭니다 등등 ...

그러나 나는 그것들을 사용할 때 전반적인 성능이 저하 될 것이라고 예상합니다. 내가 사용할 수있는 또 다른 해결책이 있습니까? 내가 찾지 못한 또 다른 방법? 어떤 도움이라도 대단히 감사합니다.

답변

0

Chipmunk가 특별히 당신을 도울 수는 없습니다. 당신이 언급 한 방법들은 효과가있을 것이지만 어리석게 느립니다.

나는 좋은 구식 폐색 쿼리를 할 것이라고 생각합니다. 셰이프를 텍스처 또는 일종의 오프 스크린 버퍼로 렌더링 한 다음 픽셀을 계산합니다.

+0

나는 objective-c, cocos2d, chipmunk에 새로운 사람들입니다. 어떤 수업을 사용할 지 제안? 이후 API에서 찾아 볼 수 있습니다. –

+0

CCRenderTexture를 만든 다음 glReadPixels()를 사용하여 픽셀 데이터를 다시 읽습니다. 이것이 * 빠르지 않다는 것을 명심하십시오. GPU에서 픽셀을 다시 읽으려면 수십 밀리 초가 걸릴 것이므로 모든 프레임에서이 작업을 수행하고 싶지는 않습니다. – slembcke

관련 문제