私は iOS ゲームをやっていますが、このメソッドを衝突検出に使用したいと考えています。
すべてのフレームをチェックするポイントがたくさん (50 以上) あるので、この方法が iDevice のグラフィック ハードウェアで実行されるかどうか疑問に思いました。
私は iOS ゲームをやっていますが、このメソッドを衝突検出に使用したいと考えています。
すべてのフレームをチェックするポイントがたくさん (50 以上) あるので、この方法が iDevice のグラフィック ハードウェアで実行されるかどうか疑問に思いました。
@DavidRönnqvistのフォローアップ:「ハードウェアアクセラレーション」かどうかは関係ありません。重要なのは、それが目的に対して十分に速いかどうかです。それから、Instruments を使用して、どこで食事をしているのかを確認し、物事を改善しようとすることができます。
コードを GPU に移動しても、自動的に高速になるわけではありません。すべてのデータを高価な GPU メモリに転送する必要があるため、実際にははるかに遅くなる可能性があります。GPU で実行するには、すべてのデータを 1 回移動してから、多くのコストのかかるベクター操作を実行してから、データを元に戻す (または単に画面に表示する) ことが理想的です。問題をそのように見せることができない場合、GPU は適切なツールではありません。
NEON アクセラレーションである可能性もありますが、これもまた無関係です。コンパイラは多くのことを NEON で高速化します (また、NEON で実行しても、常に高速に実行されるとは限りません)。とはいえ、同じ曲線に対して多くのポイント (数百または数千) をテストできる場合、この種の問題は NEON で最適に実行されると思います。
CGPathContainsPoint()
「1 つのランダムな曲線と 1 つのランダムなポイントがある」という一般的なケースでは、かなり高速に記述されていると想定する必要があります。あなたの問題がそのように見える場合、Apple のエンジニアに自社のハードウェアで勝てる可能性は低いと思われます (そして 50 ポイントは 1 よりも大きくはありません)。たとえば、彼らはすでにあなたのためにバウンディングボックスをチェックしており、あなたの再チェックは時間を無駄にしていると思います(ただし、念のためにプロファイルします)。
しかし、「既知の曲線と数万のポイントがある」のように、問題を別のものに変更できる場合は、おそらくより良い解決策を手作業でコーディングでき、それを攻撃するために Accelerate または手書きの NEON を検討する必要があります。 .
最初にプロファイリングしてから最適化します。問題が「数学」であっても、「ベクトル プロセッサ」が「高速」とまったく同じであると想定しないでください。グラフィックプロセッサはさらにそうです。