Hoe het totale gebied van alle lichamen/vormen op het scherm te berekenen

Ik probeer het totale gebied te berekenen dat alle lichamen of vormen op het scherm bezetten. D.w.z. als ik 2 cirkels heb, A en B, die elkaar snijden, wil ik het gebied berekenen dat A-vak B omvat (op het scherm).

Ik heb de chipmunk gelezen documentatie en gekeken in de aardeekhoorn API voor een methode die ik mogelijk zou gebruiken, maar ik heb deze niet gevonden alles dat ik direct kan gebruiken.

The only two methods I found, that might be useful, are these two: pointQueryFirst:layers:group: and segmentQueryFirstFrom:to:layers:group:

De manier waarop ik dacht was om:

  • Gebruik de eerste methode (pointQueryFirst) om alle punten op het scherm te doorlopen en deze methode aan te roepen. Als een punt er geen vorm in heeft, accumuleer het dan naar een variabele. Splits vervolgens die variabele waarde met het gebied van het scherm om een ​​percentage van het scherm te krijgen dat vrij is.
  • Of gebruik de tweede methode (segmentQueryFirstFrom), maak een recursief algoritme dat het scherm in twee deelt en voer de query uit op elke helft, als een helft een vorm bevat, deel dat gebied dan in tweeën en controleer of deze elke vorm bevatten , enzovoort ...

Maar ik verwacht dat bij het gebruik ervan de algehele prestaties zullen lijden. Is er een andere oplossing die ik kan gebruiken? Een andere methode die ik niet heb gevonden? Alle hulp wordt zeer op prijs gesteld.

0

1 antwoord

Chipmunk kan je daar niet echt mee helpen. De methoden die je noemde zullen werken, maar worden belachelijk traag.

Ik denk dat ik een goede ouderwetse occlusiequery zou doen. Render de vormen in een textuur of een soort offscreen-buffer en tel vervolgens de pixels.

0
toegevoegd
Maak een CCRenderTexture en lees vervolgens de pixeldata terug met glReadPixels (). Houd er rekening mee dat dit niet snel is. Het kost tientallen milliseconden om de pixels van de GPU terug te lezen, zodat je dit niet elk frame wilt doen.
toegevoegd de auteur slembcke, de bron
Ik ben nieuw in objectief-c, cocos2d, chipmunk. Eventuele suggesties over welke klassen te gebruiken? Daarna kan ik het opzoeken in de API.
toegevoegd de auteur Mr.B, de bron