1

このウェブサイトでは、その方法について説明しています。http://drububu.com/miscellaneous/voxelizer/index.html しかし、コードで実装する方法がわかりません。

4

1 に答える 1

2

手順:

1)立方体の方向を決定する2 つの 垂直方向を指定します。このコンテキストでは便宜上、それぞれ X 軸と Z 軸になるように選択します。X は交差平面の法線になり、Y、Z は平面内の 2D 座標軸になります。

ここに画像の説明を入力

2) メッシュを囲む最小の軸方向直方体 (AABB) を見つけます。それはとても簡単だと思います。この場合、[X1、X2、Y1、Y2、Z1、Z2] の 6 つの数値が得られます。

3) 次元 S を持つ立方体を選択したとします。H = S / 2 とします。XX = X1 + H から始めて、法線 (1, 0, 0) と中心 (X, 0, 0) を持つ平面を作成します。

ここに画像の説明を入力

4) メッシュを交差させます。C++ での数学と実装の詳細については、http: //www.geometrictools.com/Documentation/ClipMesh.pdfを参照してください。

5) 交差から生じるエッジを取得します。共通の終点を共有するペアを見つけてそれらを結合し、それらを二重にリンクされたリストに挿入します。このようにして、それらをパスに並べることができます。

ここに画像の説明を入力

6) [Y1, Y2, Z1, Z2] を得て、この形状を囲む最小の四角形を見つけます。

7) Z = Z1 + H から始めて、(X, Y1, Z) から (X, Y2, Z) に向かう直線を作成します。この線をパス内のすべてのエッジと交差させてポイントを取得します。重複したテストを避けるために、リンク リストに沿って歩きます。

ここに画像の説明を入力

8) ポイントを Y 座標で並べ替えます。挿入ソートで行います: https://en.wikipedia.org/wiki/Insertion_sort

9) Y 座標が A と B で、Y = A + H から始まる点の隣接するペアの場合、サイズ S の立方体を (X、Y、Z) に配置します。ここで、X と Z は前の手順からのものです。

10) Y > B - H になるまで、毎回 Y を S ずつインクリメントしながら、ポイントの各ペアに対してステップ (9) から繰り返します (図を参照)。

ここに画像の説明を入力

11) Z > Z2 - H になるまで、Z を S ずつ増分しながら、ステップ (7) から繰り返します。

12) X > X2 - H になるまで、X を S ずつインクリメントしながら、ステップ (3) から繰り返します。

これで完了です。免責事項: これはおそらく効率的な方法ではありませんが、おそらく最も簡単で簡単に実装できる方法です。

于 2015-11-05T12:45:54.803 に答える