3

3Dゲーム開発環境であるUnityで2Dスプライトゲームを作っています。オブジェクトのすべての移動を XY 平面に、回転を Z 軸に制限しました。

私の問題は、オブジェクト間の衝突を検出するために使用されるメッシュがまだ 3D でなければならないことです。プレイヤー オブジェクト (カプセル コライダー) とスプライト (ポリゴン プリズムによって定義された衝突ボリュームを持つ) の間の衝突を検出する必要があります。

私は現在、レベル エディターを書いています。特定のタイルの衝突領域をユーザーが定義できるようにする必要があります。下の画像では、ユーザーはポイント P1、P2、P3、P4 をこの順序でクリックします。

ここに画像の説明を入力

当然、点が集まって四角形を形成します。これが必要なコリジョン エリアですが、それを 3D メッシュに変換する必要があります。基本的には、ポリゴンの押し出しを生成してから、頂点の曲がりくねった三角形などを割り当てる必要があります。頂点の位置は、単にポリゴンを z 軸に沿って移動させるだけなので、把握するのに問題はありません。

ここに画像の説明を入力

特にメッシュは三角形のみで構成されている必要があるため、頂点のワインディング順序を割り当てるアルゴリズムの作成に問題があります。

明らかに、私が示した構造は重要ではありません。ポリゴンは任意の 2D 形状であり、常にプリズムを形成する必要があります。誰かがこれのための方法を知っていますか?

皆様、お忙しい中ありがとうございました。

4

2 に答える 2

1

頭に浮かぶ単純なアルゴリズムは次のようなものです。

extrudedNormal = faceNormal.multiplyScale(sizeOfExtrusion);//multiply the face normal by the extrusion amt. = move along normal
for each(vertex in face){
   vPrime = vertex.clone();//copy the position of each vertex to a new object to be modified later
   vPrime.addSelf(extrudedNormal);//add translation in the direction of the normal, with the amt. used in the 
 }

したがって、アイデアは基本的です:

  • 面法線のクローンを作成し、同じ方向に amt だけ移動します。で押し出したい
  • 面の頂点を複製し、移動 (押し出された) 法線位置を使用してそれらを移動します

より完全で機能豊富な例については、プロシージャル モデリング Unity のサンプルを参照してください。素敵なメッシュ押し出しサンプルも含まれています (MeshExtrusion.cs を使用する ExtrudedMeshTrail.js を参照してください)。

幸運を!

于 2011-02-21T17:57:27.437 に答える
1

押し出しウォールを作成するには:

ポリゴンの各頂点 a (座標 a x、a y ) について: - 次の頂点 'b' (座標 b x、b y ) を呼び出します - 'a' から 'b への線に対応する押し出された長方形を作成します': - 長方形の頂点は(a x , a y , z 0 ) , (a x , a y , z 1 ), (b x ,b y ,z 0 ), (b x ,b y ,z 1 ) - この長方形は、2 つの三角形から作成できます: - (a x ,a y ,z 0 ), (ax ,a y ,z 1 ), (b x ,b y ,z 0 ) および (a x ,a y ,z 1 ), (b x ,b y ,z 0 ), (b x ,b y ,z 1 )

代わりに三角形のストリップを作成したい場合は、さらに簡単です。各頂点 a に対して、(a x ,a y ,z 0 ) と (a x ,a y ,z 1 ) を追加するだけです。最初に処理した頂点は、他のすべての頂点をループした後に再度処理する必要があります。

エンドキャップを作成するには:

この手順は、おそらく衝突目的では必要ありません。しかし、1 つの簡単なテクニックがここにあります: http://www.siggraph.org/education/materials/HyperGraph/scanline/outprims/polygon1.htm 結果として得られる各三角形は、深さ z 0と z 1に追加する必要があります。

于 2011-02-28T22:56:08.940 に答える