2012-03-04 14 views
2

私はゲームエンジンを改善するために大学の課題に取り組んでいます。私たちが与えたコードは、メッシュのバウンディングボリュームを記述するFrameクラス内に3Dメッシュオブジェクトを格納します。問題は、エンジンが球、AABB、OABBなど、様々なタイプの境界ボリューム間の衝突を処理する必要があることです。さまざまなバウンディングボリュームの種類を処理する方法は?

与えられたクラスの仕方は、すべての異なる境界ボリュームタイプのデータメンバーと、それが使用しているものを示すタイプIDを持つことです。任意の2つのFrameオブジェクトが与えられた場合、呼び出しコードは型IDを要求し、そこからどの衝突メソッドを使用するかを決定します。

私がした最初のことは、さまざまなBVタイプのサブクラスを作成することでした。オブジェクトに必要なメモリだけが割り当てられました。今私は、呼び出しコードがこれらのサブクラスの2つの間の衝突をチェックするためのより良い方法を見つけようとしています。彼らにタイプIDを返させることは悪い習慣のように思える。これを行う標準的な方法はありますか?

答えて

1

お問い合わせの内容は、double-dispatchとなります。

+1

ありがとう、私は一般的に複数の発送について読んできました。私が見た例から、ダイナミックキャスティングは私の最高の選択かもしれません - [Wiki](http://en.wikipedia.org/wiki/Multiple_dispatch#C.2B.2B)。 理想的には、 'Sphere'と' AABB'が同じメソッドを使って衝突を検出するので、サブクラス間でコードを重複させないようにしたいと思います。これは、すべての衝突検出メソッドを別のクラスに格納することを意味しますか? – PeddleSpam

関連する問題