3

Irrlichtエンジンを使用してC++で 2D ゲームを作成したいと考えています。このゲームでは、ある種の洞窟で小さな船を操作します。この洞窟は自動的に作成され (ゲームのレベルはランダムになります)、次のようになります。

洞窟

洞窟の内部(白い部分)のポリゴンの点が既にあるとします。この形状を画面にレンダリングし、衝突検出に使用するにはどうすればよいですか? さまざまなサイトで読んだことから、三角形分割アルゴリズムを使用して、洞窟の内側のポリゴン (白い部分) を使用して洞窟の壁 (黒い部分) のメッシュを作成する必要があります。次に、これらのメッシュを衝突検出にも使用できます。これは本当に最善の方法ですか?Irrlicht には、これを実現するのに役立つ組み込み関数があるかどうか知っていますか?

どんなアドバイスも高く評価されます。

4

3 に答える 3

3

特定の 3D エンジンを使用してレンダリングする任意の多角形を取得する方法を説明すると、非常に長いプロセスになります。ほとんどすべての 3D レンダリングは三角形に関して行われます。すでに三角形で構成されているモデルを生成するツールを使用しなかった場合は、そこにあるデータから三角形を生成する必要があります。黒いスペースまたは白いスペースのいずれかを三角測量するのがおそらく最善の方法です。次に、そこからメッシュまたは頂点リストを構築し、それらの三角形をそのようにレンダリングできます。リスト内の三角形も、衝突検出のために 2 倍になります。

Irrlicht に三角測量の機能があるとは思えません。三角測量はゲーム デザインに固有のものであり、ほとんどの人がとる一般的なアプローチではないからです。(通常、彼らはゲーム ジオメトリとナビゲーション ジオメトリを並べて生成できるツールを持っています)。

于 2010-02-26T10:16:28.713 に答える
1

ポイントがポリゴンの内側か外側かを確認するには、単純に交差を数えます。(0,0) がポリゴンの外側にあることがわかります。そこからテスト ポイント (X,Y) まで線を引きます。この線が奇数のポリゴン エッジ (たとえば 1) と交差する場合、それはポリゴンの内側にあります。ラインが偶数のエッジ (0 または 2 など) と交差する場合、点 (X,Y) はポリゴンの外側にあります。このアルゴリズムを紙の上で一度実行して、自分自身を納得させると便利です。

于 2010-02-26T10:32:54.693 に答える
1

1 つのオプションは、マップ (イメージ マスク) を直接使用して衝突をテストすることです。

例えば、

if map_points[sprite.x sprite.y] is black then
   collision detected

オブジェクトが画像であり、実際のポリゴンではないことを前提としています。

実際のポリゴンを使用する場合は、オブジェクトの形状ごとに「ポイント サンプル」を用意し
、サンプルの衝突をチェックできます。

于 2010-02-26T10:22:10.070 に答える