3Dシーンのすべてのメッシュをいくつかのサブメッシュに分割できます。同様に、C#を使用して、プログラムで複数のメッシュを1つのメッシュにマージできます。この記事では、さまざまなシナリオでの3Dメッシュの分割とマージについて説明します。
- 3Dシーンメッシュスプリッターまたはマージャー– C#APIのインストール
- C#を使用してプログラムでマテリアルごとにシーンのメッシュを分割する
- C#を使用してプログラムで特定のマテリアルによってメッシュを分割する
- 3DファイルのメッシュをC#でプログラム的に単一のメッシュにマージします
3Dシーンメッシュスプリッターまたはマージャー– C#APIのインストール
Aspose.3D for .NET APIを使用して、C#を使用してプログラムで3Dメッシュを分割またはマージできます。 APIは、ダウンロードセクションからインストールするか、以下のNuGetインストールコマンドを使用して構成できます。
PM> Install-Package Aspose.3D
C#を使用してプログラムでマテリアルごとにシーンのメッシュを分割する
FBX形式のような3Dファイルには、シーンの複数のメッシュを含めることができます。メッシュに単一のマテリアルが割り当てられていない場合は、すべてのメッシュをマテリアルごとに複数のサブメッシュに分割できます。マテリアルごとにシーンのメッシュを分割するには、以下の手順に従ってください。
- 入力3Dファイルをロードします。
- SplitMeshメソッドを使用してすべてのメッシュを分割します。
- 分割されたメッシュで出力ファイルを保存します。
次のコードは、C#を使用してプログラムでマテリアルごとにシーンのメッシュを分割する方法を示しています。
// 入力FBX3Dファイルをロードします
Scene scene = new Scene("test.fbx");
// すべてのメッシュを分割する
PolygonModifier.SplitMesh(scene, SplitMeshPolicy.CloneData);
// 分割されたメッシュで出力ファイルを保存します
scene.Save("test-splitted.fbx", FileFormat.FBX7500ASCII);
C#を使用してプログラムで特定のマテリアルによってメッシュを分割する
材料を手動で指定することにより、メッシュを分割できます。このようにして、1つのマテリアルのみを含む複数のオブジェクトを作成できます。デモンストレーションの目的で、以下のコードは6つの平面を持つボックスのメッシュを作成します。次に、次の手順を使用してマテリアルを手動で指定することにより、プリミティブメッシュを分割します。
- 6つの平面を持つボックスのメッシュを作成します。
- 次に、マテリアル要素を作成し、各平面のインデックスを指定します。
- SplitMeshPolicy列挙を使用してメッシュを分割します。
以下のコードは、C#を使用してプログラムで特定のマテリアルによってメッシュを分割する方法を説明しています。
// ボックスのメッシュを作成します(ボックスは6つの平面で構成されます)
Mesh box = (new Box()).ToMesh();
// このメッシュに材料要素を作成します
VertexElementMaterial mat = (VertexElementMaterial)box.CreateElement(VertexElementType.Material, MappingMode.Polygon, ReferenceMode.Index);
// そして、平面ごとに異なる材料インデックスを指定します
mat.Indices.AddRange(new int[] { 0, 1, 2, 3, 4, 5 });
// これを6つのサブメッシュに分割し、各平面に6つの異なるマテリアルを指定しました。各平面は、サブメッシュになります。
// CloneDataポリシーを使用しました。各平面には、同じコントロールポイント情報またはコントロールポイントベースの頂点要素情報があります。
Mesh[] planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CloneData);
mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });
// これを2つのサブメッシュに分割します。最初のメッシュには0/1/2平面が含まれ、2番目のメッシュには3/4/5平面が含まれます。
// CompactDataポリシーを使用しました。各平面には、独自のコントロールポイント情報またはコントロールポイントベースの頂点要素情報があります。
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);
3DファイルのメッシュをC#でプログラム的に単一のメッシュにマージします
次の手順で、さまざまなメッシュを1つの有効なメッシュにマージできます。
- 入力3Dシーンファイルをロードします。
- すべてのメッシュをマージします。
- 最後に、マージされたメッシュをエンコードします。
次のコードは、C#を使用してプログラムでメッシュを単一のメッシュにマージする方法を詳しく説明しています。
// 入力3Dシーンをロードします
Scene scene = new Scene("LAD-TOP.rvm");
// すべてのメッシュをマージします
Mesh mesh = PolygonModifier.MergeMesh(scene);
// このメッシュをPLY形式にエンコードします
FileFormat.PLY.Encode(mesh, "LAD-TOP.ply");
無料の一時ライセンスを取得する
APIを無制限にテストするための無料評価ライセンスを取得できます。
結論
結論として、3Dシーンのメッシュをマージまたは分割する方法を学習しました。 APIは、1つまたは複数のメッシュを分割またはマージするためのさまざまなメソッドを公開します。これらのメソッドは、要件に応じて利用できます。さらに、他のいくつかの機能も説明されているドキュメントに気軽にアクセスしてください。ご不明な点がございましたら、無料サポートフォーラムまでお問い合わせください。