1

さまざまな高度なグラフィック手法を使用するプログラムを作成しています。今のところ、2 つの Wavefront obj モデルがインポートされ、画面にレンダリングされます。これら 2 つのオブジェクト間のブルート フォース トライアングル - トライアングル衝突検出を実装しようとしていますが、これらの操作をいつ実行するかが心配です。このプログラムにはアニメーションとモーションはありません。やりたいことは、1 つのオブジェクトを変換 (glTranslate) して他のオブジェクトと衝突させ、衝突する三角形に色を付けることだけです。

衝突検出機能は初期モデルの頂点で動作する必要がありますか、それとも何らかの方法で現在の座標を取得する必要がありますか??

4

2 に答える 2

1

動くこと (できれば物理) を描画から切り離すのがおそらく最善です。アイドル関数またはタイマー関数を使用して波面を動かし、衝突をチェックし、単に三角形を衝突 (または衝突を示したいもの) としてマークし、画面の再描画を強制することができます。描画コードは単に注意する必要があります。画面をクリアし、すべての頂点を再描画し、衝突としてマークされているかどうかに基づいて適切に色付けします。

衝突検出は、モデルの頂点で機能する可能性が最も高いですが、適切に計算を行うために、オブジェクトが「空間」のどこにあるかを追跡する必要があります。

于 2013-01-14T19:24:32.383 に答える
0

レンダリングと物理/衝突の 2 つのモジュールを分離するのが最善です。

したがって、1 つのオブジェクトには 2 つの表現があります。1 つはレンダリング用 (テクスチャ、モデル ジオメトリ、マテリアルなど) で、もう 1 つは物理学用 (バウンディング ボックス、ワード スペース位置など) です。

  • 物理学はそれほど完璧である必要はなく、通常はメッシュ近似だけが必要です。したがって、家のオブジェクトの場合、境界ボックスまたは境界球のみを使用して衝突をテストします。
  • もう 1 つは衝突階層です。低解像度から高解像度までです。最初に境界球のみをテストし (安価なテスト)、次に三角形から三角形への衝突テストに徐々に移行します (非常に高価です)。
于 2013-01-15T10:38:36.297 に答える