Puoi dividere tutte le mesh di una scena 3D in diverse sottomesh. Allo stesso modo, puoi unire più mesh in un’unica mesh a livello di codice usando C#. Questo articolo illustra la divisione e l’unione di mesh 3D in diversi scenari:
- Splitter o fusione di mesh di scene 3D – Installazione dell’API C#
- Dividi mesh di una scena per materiale a livello di codice usando C#
- Dividi una mesh per un materiale specifico a livello di codice usando C#
- Unisci le mesh in un file 3D in una singola mesh a livello di codice in C#
Splitter o fusione di mesh di scene 3D – Installazione dell’API C#
L’API Aspose.3D for .NET può essere utilizzata per dividere o unire mesh 3D a livello di codice utilizzando C#. Puoi configurare l’API installandola dalla sezione Download o con il comando di installazione NuGet seguente:
PM> Install-Package Aspose.3D
Dividi mesh di una scena per materiale a livello di codice usando C#
Un file 3D come il formato FBX può contenere diverse mesh di una scena. È possibile suddividere tutte le mesh in più sub mesh per materiale se alla mesh non è stato assegnato un singolo materiale. Segui i passaggi seguenti per dividere le mesh di una scena per materiale:
- Carica il file 3D di input.
- Dividi tutte le mesh con il metodo SplitMesh.
- Salva il file di output con le mesh divise.
Il codice seguente mostra come dividere le mesh di una scena per materiale a livello di codice usando C#:
// Carica il file FBX 3D di input
Scene scene = new Scene("test.fbx");
// Dividi tutte le maglie
PolygonModifier.SplitMesh(scene, SplitMeshPolicy.CloneData);
// Salva il file di output con mesh divise
scene.Save("test-splitted.fbx", FileFormat.FBX7500ASCII);
Dividi una mesh per un materiale specifico a livello di codice usando C#
È possibile dividere una mesh specificando manualmente il materiale. In questo modo è possibile creare più oggetti contenenti un solo materiale. A scopo dimostrativo, il codice seguente crea una mesh di una scatola con 6 piani. Quindi dividerai una mesh primitiva specificando manualmente il materiale utilizzando i seguenti passaggi:
- Crea una mesh di una scatola con sei piani.
- In secondo luogo, crea un elemento materiale e specifica gli indici per ciascun piano.
- Dividi la mesh usando l’enumerazione SplitMeshPolicy.
Il codice seguente spiega come dividere una mesh per materiale specifico a livello di codice usando C#:
// Crea una maglia di scatola (una scatola è composta da 6 piani)
Mesh box = (new Box()).ToMesh();
// Crea un elemento materiale su questa mesh
VertexElementMaterial mat = (VertexElementMaterial)box.CreateElement(VertexElementType.Material, MappingMode.Polygon, ReferenceMode.Index);
// E specificare un indice di materiale diverso per ciascun piano
mat.Indices.AddRange(new int[] { 0, 1, 2, 3, 4, 5 });
// Ora dividilo in 6 sotto mesh, abbiamo specificato 6 materiali diversi su ciascun piano, ogni piano diventerà una sotto mesh.
// Abbiamo utilizzato la politica CloneData, ogni piano avrà le stesse informazioni sul punto di controllo o le informazioni sull'elemento del vertice basate sul punto di controllo.
Mesh[] planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CloneData);
mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });
// Ora dividilo in 2 sotto mesh, la prima mesh conterrà 0/1/2 piani e la seconda mesh conterrà i 3/4/5 piani.
// Abbiamo utilizzato la politica CompactData, ogni piano avrà le proprie informazioni sul punto di controllo o le informazioni sull'elemento del vertice basato sul punto di controllo.
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);
Unisci le mesh in un file 3D in una singola mesh a livello di codice in C#
Puoi unire diverse mesh in un’unica mesh valida con i passaggi seguenti:
- Carica il file di scena 3D di input.
- Unisci tutte le mesh.
- Infine, codifica la mesh unita.
Il codice seguente elabora come unire le mesh in una singola mesh a livello di codice usando C#:
// Carica la scena 3D di input
Scene scene = new Scene("LAD-TOP.rvm");
// Unisci tutte le mesh
Mesh mesh = PolygonModifier.MergeMesh(scene);
// Codifica questa mesh nel formato PLY
FileFormat.PLY.Encode(mesh, "LAD-TOP.ply");
Ottieni una licenza temporanea gratuita
Puoi ottenere una Licenza di valutazione gratuita per testare l’API senza alcuna limitazione.
Conclusione
In conclusione, hai imparato come unire o dividere una mesh di una scena 3D. L’API espone diversi metodi per dividere o unire una o più mesh, che puoi utilizzare secondo le tue esigenze. Inoltre, non esitare a visitare la Documentazione dove vengono spiegate anche molte altre funzionalità. Ti preghiamo di contattarci al Forum di supporto gratuito in caso di domande.