2

これは、より一般的な OpenGL の質問かもしれません。OpenGL ES for 2d を使用し、チュートリアルを読みながら、画面上でオブジェクトを回転させたり移動させたりするなど、基本的なマトリックス変換を行う方法を学びました。これまでのところ、とても良いです。いくつかのオブジェクトが動き回ったり回転したりしています。

私にとっての次のステップは、衝突検出を行うことです。境界ボックス間の交差をチェックするような単純なものはおそらく問題ありません。ただし、境界ボックスがいつ交差するかを知るためには、オブジェクトの変換、回転座標を知る必要があるため、行き詰まっています。しかし、OpenGL からこれらの数値を取得する方法が見つかりません。

翻訳された座標を取得するためだけに、OpenGLに回転と変換を行うだけでなく、自分で回転と変換を行う必要がありますか? または、現在の行列を頂点に適用して結果を取得する方法はありますか? OpenGL は私よりずっと速く計算できませんでしたか?

この種のことが通常どのように行われるかについて、一般的なアドバイスをいただければ幸いです。

4

2 に答える 2

7

通常、ゲームでは視覚情報と衝突情報は個別に扱われます。頂点情報ではなく、物理コードのすべての変換情報 (つまり、すべての行列)を再利用する必要があることに注意してください。最初は少し非効率的で直感に反するように聞こえます。

その理由の 1 つは、ポリゴンの精度で衝突検出を要求するのは珍しいことです。通常は、おおよその量で十分です。

したがって、ポリゴンのセットが別のポリゴンのセットと衝突することはめったにありません。実際、衝突しないように最善を尽くす必要があります。球をそれ自体、ボックス、線、または「スイープ」球 (カプセル) と衝突させる必要があります。より大きな非凸モデルは、複数の凸ボリュームに分割して個別に扱うことができます。

そのため、ビジュアル メッシュを衝突に直接使用していた場合、物理コードは、詳細度の低いメッシュや、球体やボックスのような近似ボリュームを使用するよりもはるかに遅くなります。もう少し面倒ですが、衝突の遅い部分は変換ではなく、実際の検出であるため、この方法は実際にはより速く機能します。

ゲームによっては、可能な限り球体を使用することを検討します。球体は回転する必要がなく、テストも簡単です。ジオメトリが GPU ランドに消える前に、モデルのロード時に境界球を生成することも簡単です。

この本は非常に優れたリソースであり、オンライン情報もたくさんあります。

于 2009-09-06T05:04:42.797 に答える
0

移動と回転は自分で行う必要があります。OpenGL にデータを要求するのは非常に非効率的です。多くの場合、グラフィックス エンジンは OpenGL データ (特に状態データ) を保持し、必要最小限の情報のみを OpenGL 状態マシンに伝えます。

于 2009-09-06T04:45:07.110 に答える