画面上のすべてのボディ/シェイプの合計面積を計算する方法

私はすべてのボディまたはシェイプが画面上に占める総面積を計算しようとしています。私。もし私が2つの円AとBが交差しているならば、私はユニオンBが(画面上で)カバーする面積を計算したいと思う。

私はchipmunk ドキュメンテーションを読んでいて、Chipmunk API 私が直接使うことができるもの。

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

私が考えていたのは、

  • 最初のメソッド(pointQueryFirst)を使用して、画面上のすべてのポイントを調べ、このメソッドを呼び出します。ポイントに形状がない場合は、そのポイントを変数に累積します。その変数の値を画面の領域で割って空いている画面の割合を求めます。
  • または、2番目のメソッド(segmentQueryFirstFrom)を使用し、画面を半分に分割し、各半分にシェイプが含まれている場合はクエリを実行し、その領域を半分に分割し、それらにシェイプが含まれているかどうかを確認する再帰アルゴリズムを作成します、など...

しかし、私はそれらを使用すると、全体的なパフォーマンスが低下することを期待しています。私が使用できる別のソリューションがありますか?私が見つけられなかった別の方法?どんな助けでも大歓迎です。

0

1 答え

Chipmunkは特にそれを手伝ってくれるわけではありません。あなたが言った方法はうまくいくが、ばかげて遅い。

私は良い古いオクルージョンクエリを行うと思います。シェイプをテクスチャまたはある種のオフスクリーンバッファにレンダリングして、ピクセルを数えます。

0
追加された
CCRenderTextureを作成し、次にglReadPixels()を使用してピクセルデータを読み込みます。これは速くはないことを覚えておいてください。 GPUからピクセルを読み込むには数十ミリ秒かかりますので、毎フレームこれをやりたくはありません。
追加された 著者 slembcke,
私はobjective-c、cocos2d、chipmunkを初めて使っています。クラスを使用するための提案はありますか?その後、私はAPIでそれを調べることができます。
追加された 著者 Mr.B,